I have some difficulties with json deserialization using GSon and I hope somebody can help me.
I want to deserialize the following json snippet:
{
"fieldA": "valueA",
"myCollection": {
"AnotherClass": [
{
"objectAfieldA": "valueB",
"objectAfieldB": "valueC"
},
{
"objectAfieldA": "valueD",
"objectAfieldB": "valueE"
}
]
}
}
the corresponding overall class has following fields:
...
String fieldA;
List<AnotherClass> = new ArrayList<AnotherClass>();
....
Now, my problem is that when I deserialize, using fromJson(jsonSample, resultContainer.class), without the List<T> element, everything is good, but I get a NullPointerException when I include the contained list. I’ve read about how to deal with collections of generic types and the use of TypeToken, but I can’t apply this knowledge when my collection is part of another class…
I really would appreciate any help to solve this.
When deserializing, you only need to use the
TypeTokenif the outer-most structure to be deserialized into is a generic collection. This is not the case for the example in the original question. So, use of aTypeTokenis unnecessary.The issue appears to be that the JSON structure does not match the Java structure attempting to be bound to.
The JSON structure defines
So, define a Java data structure to match that, and deserialization will work very simply, without any custom processing necessary. If such a matching Java structure is not provided, then custom deserialization is necessary.
Here is such a working example using the names and types from the original question.