Сериализация / десериализация объектов 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