0

我的场景非常复杂,但这里有一个摘要:

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

它工作得很好,除了一个问题是在 Gson 生成的 JSON 数据类名称中没有提到,所以它仍然没有太大帮助。有没有办法毫不费力地将类名添加到 Gson 输出?(不向每个 AST 节点等添加一些方法)

4

3 回答 3

4

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

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

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

于 2013-10-02T07:50:08.073 回答
1

Gson 提供了一个自定义序列化和反序列化对象的选项,通过实现接口JsonSerializer(用于序列化)和JsonDeserializer(用于反序列化),您可以忽略 JSON 字符串的某些部分(例如_class:com.example.SomeSourceClass)。

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

这将是您问题的特定解决方案。

这是Gson 用户指南

于 2013-10-02T05:12:46.510 回答
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();
于 2014-05-07T11:16:25.093 回答