我的情景非常复杂,但这是一个总结:
我正在尝试理解编译器的来源 - 并且为了理解每个AST节点代表什么,我正在生成不同程序的AST的JSON序列化,然后检查可视化的JSON输出。
它的效果很好,除了一个问题是Gson生成的JSON数据类名称没有被提及,所以它仍然没有多大帮助。有没有办法在没有太多努力的情况下为Gson输出添加类名? (不向每个AST节点添加一些方法等。)
答案 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字符串。
这将是您问题的具体解决方案。
答案 2 :(得分:0)
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();