1

GSONを使用してオブジェクトモデルをJSONにシリアル化するときに、特定の値をラップするにはどうすればよいですか?モデルの例:

class Order {
  Customer cust;
}

class Customer {
  String name;
  int age;
}

顧客をシリアル化すると、通常、次のようになります。

{cust:{name:joe, age:21}}

私がやりたいのは、OrderとCustomerの値をクラス名を持つ追加の要素でラップすることです。したがって、予想されるJSONは次のようになります。

{Order:{cust:Customer:{name:joe, age:21}}}

シリアル化する実際のクラスは何でもかまいません。そのため、シリアライザーで特定のプロパティをハードコーディングすることはできません。ただし、特定のプロパティをクラス名でラップしたいと思います。

これどうやってするの?

4

1 に答える 1

0

ただし、これは有効な json 文字列ではありません。

{Order:{cust:Customer:{name:joe, age:21}}}

アプリケーションでは、json 文字列のシリアル化/逆シリアル化に使用する前に、ドメイン クラスを適切にモデル化/実装する必要があります。つまり、toJson/fromJson メソッドを呼び出す前に、ドメイン クラスを認識しておく必要があります。ただし、実際のドメイン クラス タイプは、Java ジェネリック タイプを使用して、実行時に動的に決定できます。

Gson ユーザー ガイドのジェネリック型のシリアル化と逆シリアル化のセクションを確認してください。

public class Foo<T> {
  public T value;
}

シリアル化するには:

Gson gson = new Gson();
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.toJson(foo, fooType);

逆シリアル化するには:

Gson gson = new Gson();
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.fromJson(json, fooType);
于 2012-04-05T11:05:51.123 に答える