У меня возникли проблемы десериализации пользовательского объекта с помощью gson. У меня есть этот класс:Модернизация: стандартная десериализация детского списка GSON
public class Content implements java.io.Serializable {
private Long id;
private int tipo;
private String title;
private String content;
private Integer reward;
/** Not-null value. */
private String imageUrl;
private String bannerUrl;
private String logoUrl;
/** Not-null value. */
private String actionUrl;
private Integer templateType;
private String expiresAt;
private Integer unlockReward;
private Integer reportType;
private String completionType;
private Integer interactionType;
private Integer productId;
private Integer views;
private Boolean saved;
private Double weight;
/** Used to resolve relations */
private transient DaoSession daoSession;
/** Used for active entity operations. */
private transient ContentDao myDao;
private List<Rule> ruleList;
private List<Category> categoryList;
...
// all getters and setters code
...
}
То, что я хочу, чтобы десериализации categoryList с помощью пользовательского адаптера. Я создал его, используя следующий код:
Type typeOfListOfCategory = new com.google.gson.reflect.TypeToken<List<Category>>(){}.getType();
builder.registerTypeAdapter(typeOfListOfCategory, new JsonDeserializer<List<Category>>() {
@Override
public List<Category> deserialize(JsonElement element, Type type,
JsonDeserializationContext context) throws JsonParseException {
// my code goes in here
}
});
Gson gson = builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
И тогда я использовал его в выходной адаптер
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://localhost/api")
.setConverter(new GsonConverter(gson)).build();
Но мой пользовательский адаптер никогда не вызывается.
, что JSON я получаю, как это:
[
{
"id": 1,
"tipo": 1,
"title": "title",
"content": "content",
"reward": 2.0,
"image_url": "url1",
"banner_url": "url2",
"logo_url": "url3",
"action_url": "url4",
"template_type": 0,
"expires_at": "2014-08-31T00:00:00.000Z",
"unlock_reward": 2,
"report_type": 0,
"completion_type": 0,
"rules": [
{
"range": "1",
"operator": "==",
"key": "key1"
}
],
"categories": [
{
"description": "description"
}
]
},
...
]
Любые идеи?
Спасибо. Вы были правы относительно списка правил и списка категорий. Другие поля (например, actionUrl) в порядке, учитывая FieldNamingPolicy :). Я приму свой ответ, как только смогу. – gfhuertac
Более половины ваших полей ошибочно названы. для конвертера JSON изменения именования изменяются в Java. поле должно быть строчным с подчеркиванием в качестве разделителя. – Jimmy
Как я уже говорил в своем предыдущем комментарии, только поля списка были названы неправильными. Остальные в порядке, учитывая политику именования (которая автоматически преобразует поля в стандарт Java). – gfhuertac