在使用Gson进行序列化时如何公开类名

时间:2013-10-02 03:52:22

标签: java json gson

我的情景非常复杂,但这是一个总结:

我正在尝试理解编译器的来源 - 并且为了理解每个AST节点代表什么,我正在生成不同程序的AST的JSON序列化,然后检查可视化的JSON输出。

它的效果很好,除了一个问题是Gson生成的JSON数据类名称没有被提及,所以它仍然没有多大帮助。有没有办法在没有太多努力的情况下为Gson输出添加类名? (不向每个AST节点添加一些方法等。)

3 个答案:

答案 0 :(得分:3)

您也可以使用Genson将对象的类名添加到输出的json中,只需执行以下操作:

Genson genson = new Genson.Builder().setWithClassMetadata(true).create();
String json = genson.serialize(yourNode);

好处是它使您能够反序列化回那些具体类型。 有关详细信息,请参阅wiki

答案 1 :(得分:1)

Gson提供了一个自定义序列化和描述对象的选项,通过实现接口JsonSerializer(用于序列化)和JsonDeserializer(用于descralizing),您可以忽略JSON字符串的某些部分(例如{ {1}})。

这也意味着通用/常规Gson isntance将无法读取您的JSON字符串。

这将是您问题的具体解决方案。

以下是Gson Userguide

答案 2 :(得分:0)

检查runtimeAdapter

 RuntimeTypeAdapter<Node> nodeAdapter = RuntimeTypeAdapter.create(Node.class,"type");
 nodeAdapter.registerSubtype(Begin.class,"Begin");
 nodeAdapter.registerSubtype(State.class,"State");
 gsonBuilder.registerTypeHierarchyAdapter(Class.class, new GsonClassAdapter())
            .registerTypeAdapter(Node.class,nodeAdapter )
            .enableComplexMapKeySerialization().setPrettyPrinting();
 gson = gsonBuilder.create();