Сериализация / десериализация объектов JSON с помощью Google GSON

Я хочу сериализовать / десериализовать Java-объекты в / из JSON. Google GSON является предпочтительным. Пусть у меня есть класс А:

класс А {
  int x = 1;
  int y = 2; 
}

Затем, если я вызову new Gson(). ToJson(new A()), я получу следующее:

{x: 1, y: 2}. 

Однако я хочу иметь

{класс: "А", х: 1, у: 2}

Поэтому я могу десериализовать его, используя отражение, не зная имени класса во время компиляции. Как я могу это сделать? Спасибо.

2 ответа

Если использование Gson является предпочтительным или обязательным, то конкретно для вопроса о том, как генерировать JSON структуры {class:"A", x:1, y:2} из экземпляра структуры Java class A {int x = 1; int y = 2;}В настоящее время необходимо реализовать пользовательскую сериализацию. Точно так же, чтобы десериализовать этот JSON в эту структуру Java, необходимо реализовать пользовательскую десериализацию.

Заметьте, что вместо такой "ручной" обработки у Gson скоро будет RuntimeTypeAdapter доступны для более простой полиморфной десериализации. См. http://code.google.com/p/google-gson/issues/detail?id=231 для получения дополнительной информации. Даже если вы не можете использовать RuntimeTypeAdapterЭто, по крайней мере, пример создания настраиваемого десериализатора.

Если вы можете переключать API отображения JSON, то я рекомендую рассмотреть Джексона, поскольку у него есть работающий и относительно простой механизм полиморфного десериализации. Я опубликовал несколько простых примеров на http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html.

Ваш второй пример не JSON. Если вы хотите что-то, что поддерживает состояние экземпляра и определенные классы и т.д., проверьте YAML

http://www.yaml.org/

Другие вопросы по тегам