При десериализации вам нужно использовать TypeToken
, только если самая внешняя структура, в которую нужно десериализоваться, является общей коллекцией.Это не относится к примеру из исходного вопроса.Таким образом, использование TypeToken
не является необходимым.
Похоже, проблема в том, что структура JSON не соответствует структуре Java, пытающейся привязаться к ней.
Структура JSON определяет
an object with two elements
element 1 is a string named "fieldA",
element 2 is an object named "myCollection", which has one element
the one element is an array named "AnotherClass", composed of objects with two elements
element 1 is a string named "objectAfieldA",
element 2 is a string named "objectAfieldB"
Итак, определите структуру данных Java, чтобы соответствовать этому, и десериализация будет работать очень просто, без какой-либо специальной обработки.Если такая подходящая структура Java не предоставлена, тогда необходима пользовательская десериализация.
Вот такой рабочий пример, использующий имена и типы из исходного вопроса.
import java.io.FileReader;
import com.google.gson.Gson;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
resultContainer result = gson.fromJson(new FileReader("input.json"), resultContainer.class);
System.out.println(gson.toJson(result));
}
}
class resultContainer
{
String fieldA;
MyCollectionContainer myCollection;
}
class MyCollectionContainer
{
SomeOtherClass[] AnotherClass;
}
class SomeOtherClass
{
String objectAfieldA;
String objectAfieldB;
}