2014-01-11 6 views
0

Я пытаюсь сериализациями этого внутреннего классаСериализации статического внутреннего класса FlexJSON

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; 
    } 
} 

с

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

но только {} является retured.

Если я пытаюсь добавить public перед каждой переменной-члена, он дает эту ошибку:

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

Я пытался следовать example, но он не показывает, как Person построена, и я дон Не знаю, как это влияет на класс класса static, поскольку я до сих пор довольно новичок в Java.

Я также попытался прочитать все решения, предоставленные для этой ошибки, данные Google, но все же ничего.

Как может flexjson.JSONSerializer() вернуть все переменные-члены внутреннего класса static?

ответ

2

but only {} is retured.

Видимо flexjson использует добытчик для решения JSON элементов. У вашего класса нет.

Просто добавьте соответствующих добытчики

public String getType() { 
    return type; 
} 

public String getId() { 
    return id; 
} 

public String getFunction() { 
    return function; 
} 

public Object getParameters() { 
    return parameters; 
} 

Что касается

If I try to add public before each member variable, it gives this error:

Это потому, что ваш static класса имеет доступ пакетов по умолчанию, и поэтому его поля не видны любому классу вне пакета его заявленный в .

+0

Genius! Спасибо огромное! Извините за загрязнение сайта вопросами noob, но я все еще слишком новичок в Java, чтобы полностью разобраться в этих проблемах. Однажды я буду хорошо разбираться в этом удивительном языке! –

+1

@ Gracchus Это не было очевидно. Некоторые анализаторы/генераторы JSON используют сами поля для сериализации объекта. 'flexjson' решил использовать мутаторы/аксессоры (например,' jackson'). Вы просто должны знать, что искать. –

Смежные вопросы