2010-12-25 5 views
0

Я хочу сериализовать/десериализовать java-объекты в/из json. предпочтительнее использовать google gson. Пусть у меня есть класс А:сериализация/десериализация объекта json с помощью google gson

 
class A { 
    int x = 1; 
    int y = 2; 
} 

Тогда, если я позвоню новый Gson() toJson (новый A()) Я получаю следующее:.

 
{ x: 1, y : 2}. 

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

 
{class : "A", x:1, y:2} 

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

ответ

0

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

http://www.yaml.org/

+0

Мне нужно добавить только одно поле для каждого объекта, который будет описывать имя класса. JSON является родным для android, поэтому я предпочитаю использовать его. – Boris

+0

Он решает «сериализацию», но десериализация остается проблематичной. – Boris

+0

Да, я не думаю, что он оборудован, чтобы делать то, что вы хотите. Вы действительно должны проверить ямль. YAML - это надмножество JSON, и он может делать практически то, что вы хотите (при условии, что я понимаю, чего вы хотите) – Falmarri

0

Если использование 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-интерфейсы API JSON, я рекомендую рассмотреть Jackson, так как он имеет рабочий и относительно простой механизм полиморфного десериализатора. Я опубликовал несколько простых примеров: http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html.