4

json を に逆シリアル化するとき、逆シリアルclass Foo{int id; List<String> items; List<Long> dates;}化後に null のフィールドを自動初期化するにはどうすればよいですか。Gson libでそのような可能性はありますか?

元:

Foo foo = new Gson().fromJson("{\"id\":\"test\", \"items\":[1234, 1235, 1336]}", Foo.class)
foo.dates.size(); -> 0 and not null pointerException

if (foo.attr == null) foo.attr = ... できることはわかっていますが、 Foo クラス thx
の知識がなくても、より一般的なコードを探しています

編集:申し訳ありませんが、GettersをFooに入れるだけで十分です


閉まっている

4

1 に答える 1

1

カスタム デシリアライザーを作成する必要があります。

クラスが呼び出されたと仮定するとMyAwesomeClass、次のようなものを実装します

MyAwesomeClassDeserializer implements JsonDeserializer<MyAwesomeClass> {

@Override
public MyAwesomeClass deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) throws JsonParseException
{
    // TODO: Do your null-magic here

}

次のように GSON に登録します。

Gson gson = new GsonBuilder()
    .registerTypeAdapter(MyAwesomeClass.class, new MyAwesomeClassDeserializer())
    .create();

次に、メソッドを呼び出してfromJson(String, TypeToken)、逆シリアル化されたオブジェクトを取得します。

MyAweSomeClass instance = gson.fromJson(json, new TypeToken<MyAwesomeClass>(){}.getType());
于 2012-07-10T08:22:58.550 に答える