Pergunta

Estou tentando serializar esta classe interna

static class functionMessage{
    String type = "function";
    String id;
    String function;
    Object parameters;

    public functionMessage(String ID, String Function, Boolean Parameters) {
        this.id = ID;
        this.function = Function;
        this.parameters = (Boolean) Parameters;
    }
}

com

new flexjson.JSONSerializer().exclude("*.class").serialize( 
    new functionMessage(
        "container", 
        "showContainer", 
        Boolean.TRUE
    ) 
) 

se apenas {} é devolvido.

Se eu tentar adicionar public antes de cada variável de membro, ocorre este erro:

flexjson.JSONException: Error trying to deepSerialize  
Caused by: java.lang.IllegalAccessException: Class flexjson.BeanProperty can not access a member of class with modifiers "public"

Eu tentei seguir o exemplo, mas não mostra como Person é construído, e não sei como tornar a classe um static a classe interna afeta isso porque ainda sou bastante novo em Java.

Também tentei ler todas as soluções fornecidas para esse erro fornecidas pelo Google, mas ainda nada.

Como pode flexjson.JSONSerializer() retornar todas as variáveis-membro de um static classe interna?

Foi útil?

Solução

mas apenas {} é retornado.

Aparentemente flexjson usa getters para resolver elementos JSON.Sua turma não tem nenhum.

Basta adicionar getters correspondentes

public String getType() {
    return type;
}

public String getId() {
    return id;
}

public String getFunction() {
    return function;
}

public Object getParameters() {
    return parameters;
}

Quanto a

Se eu tentar adicionar public antes de cada variável de membro, ocorrerá este erro:

Isso porque o seu static class tem acesso ao pacote padrão e seus campos, portanto, não são visíveis para nenhuma classe fora do pacote em que foi declarada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top