【发布时间】:2010-12-25 01:11:00
【问题描述】:
我想将 java 对象序列化/反序列化到 json。谷歌 gson 更可取。 让我有 A 类:
A类{ 诠释 x = 1; 整数 y = 2; }然后,如果我调用 new Gson().toJson(new A()) 我将得到以下信息:
{ x:1,y:2}。但我想拥有
{类:“A”,x:1,y:2}所以我可以在编译时不知道类名的情况下使用反射反序列化它。我该怎么做? 谢谢。
【问题讨论】:
我想将 java 对象序列化/反序列化到 json。谷歌 gson 更可取。 让我有 A 类:
A类{ 诠释 x = 1; 整数 y = 2; }然后,如果我调用 new Gson().toJson(new A()) 我将得到以下信息:
{ x:1,y:2}。但我想拥有
{类:“A”,x:1,y:2}所以我可以在编译时不知道类名的情况下使用反射反序列化它。我该怎么做? 谢谢。
【问题讨论】:
您的第二个示例不是 JSON。如果您想要维护实例状态和特定类等的东西,请查看 YAML
【讨论】:
如果首选或需要使用 Gson,那么具体到如何从结构 class A {int x = 1; int y = 2;} 的 Java 实例生成结构 {class:"A", x:1, y:2} 的 JSON 的问题,目前需要实现自定义序列化。同样,要从这个 JSON 反序列化到这个 Java 结构,则需要实现自定义反序列化。
请注意,Gson 很快将提供RuntimeTypeAdapter 用于更简单的多态反序列化,而不是这种“手动”处理。有关更多信息,请参阅http://code.google.com/p/google-gson/issues/detail?id=231。即使你不能使用RuntimeTypeAdapter,它至少提供了一个创建可配置自定义反序列化器的示例。
如果您可以切换 JSON 映射 API,那么我建议您考虑 Jackson,因为它有一个有效且相对简单的多态反序列化器机制可用。我在http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html发布了一些简单的例子。
【讨论】: