2015-08-28 2 views
1

Я пытаюсь что-то действительно просто, и это должно работать:gson fromjson бросает ошибку NoClassDefFound при десериализации пользовательского объекта

Может кто-нибудь прокомментировать, почему я могу сериализовать JSON, но не в состоянии десериализации его обратно и получить свой объект обратно ,

Классы

public class ConfigJsonObj { 
public List<ConfigJson_InvitesPending> invites_pending; 

public ConfigJsonObj() { 
    invites_pending = new ArrayList<ConfigJson_InvitesPending>(); 
} 

public ConfigJsonObj(List<ConfigJson_InvitesPending> invitesPendings) { 
    invites_pending = new ArrayList<ConfigJson_InvitesPending>(); 
    if (invitesPendings!=null) { 
     invites_pending.addAll(invitesPendings); 
    } 
} 
} 

public class ConfigJson_InvitesPending { 
public String toDisplayName; 

public ConfigJson_InvitesPending() {} 

public ConfigJson_InvitesPending(String toName) { 
    toDisplayName = toName; 
} 
} 

Код для сериализации

String json = gson.toJson(configJsonObjObject); 

Json генерироваться

{ 
"invites_pending": [ 
{ 
    "toDisplayName": "London" 
} 
] 
} 

Код десериализации

ConfigJsonObj obj = gson.fromJson(json, ConfigJsonObj.class); 
    return obj; 

Исключение, когда я называю gson.fromJson (...) выше:

java.lang.NoClassDefFoundError 
more.nmspace.dto.ConfigJsonObj 

Я понятия не имею, почему я не подвожу не класс четкости найдена ошибка!

+0

Восстановите свой проект, убедитесь, что все зависимости присутствуют. Я не думаю, что это проблема Gson. – durron597

+0

сделал это, тот же результат. Все эти классы присутствуют в одном пакете. Оба вышеуказанных класса ConfigJson * ранее были внутренними классами, теперь я переместил их в свои отдельные файлы. –

+0

Я действительно, действительно не думаю, что это проблема Gson. Это * кое-что * связано с вашей сборкой или настройкой проекта, вот почему «NoClassDefFoundError». Однако у этого вопроса недостаточно информации для нас, чтобы помочь вам разобраться в этом. – durron597

ответ

0

Хорошо, теперь он работает, после двух вечеров, проведенных с этой ошибкой!

Я использовал код сериализации/десериализации Gson внутри другого класса, который был ParseObject, и он дал мне ошибки.

Например.

@ParseClassName("MyParseObject") 
public class MyParseObject extends ParseObject { 

public void setConfigJsonObj(ConfigJsonObject configJsonObj) { 
    String json = (new Gson).toJson(configJsonObj); 
    put("config_json",json); 
} 
public ConfigJsonObject getConfigJsonObject() { 
    String config_json = getString("config_json"); 
    ConfigJsonObject obj = (new Gson).fromJson(config_json,ConfigJsonObject.class); 
    return obj; 

} 

} 

Я хотел, чтобы инкапсулировать объект < -> преобразование JSON в класс DTO, но это не может быть сделано в этом случае.

Итак, теперь я заменил приведенный выше код и сделал сериализацию/десериализацию внешними по отношению к классу MyParseObject, и я передаю json непосредственно ему, а не пользовательскому объекту.

Надеюсь, что это также поможет кому-то еще. Cheers

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