0

私のシナリオは非常に複雑ですが、要約は次のとおりです。

私はコンパイラのソースを理解しようとしています。また、各 AST ノードが何を表しているかを理解するために、さまざまなプログラムの AST の JSON シリアル化を生成し、後で視覚化された JSON 出力を調べています。

Gsonで生成されたJSONデータクラス名が言及されていないという1つの問題を除いて、それはうまく機能します。そのため、それでもあまり役に立ちません。手間をかけずに Gson の出力にクラス名を追加する方法はありますか? (すべてのASTノードなどに何らかのメソッドを追加することなく)

4

3 に答える 3

4

Gensonを使用して、オブジェクトのクラス名を出力された json に追加することもできます。

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

良い点は、これらの具体的な型に逆シリアル化できることです。詳細については、ウィキを参照してください。

于 2013-10-02T07:50:08.073 に答える
1

Gson は、JSON 文字列の一部 (たとえば ) を無視できるインターフェイスJsonSerializer(シリアル化用) および(デスクラライズ用) を実装することにより、オブジェクトをカスタム シリアル化およびデスクライアライズするオプションを提供します。JsonDeserializer_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 に答える