3
Java 7でGsonパーサを使用しています。後で目的のクラスに逆シリアル化できるように、自分のプロパティの1つを生のJSON文字列として保存したいと思います。プロパティの未処理のJSON文字列を保持する
例入力JSON:
{
"foo":"bar",
"body":["blah"]
}
又はこのようなクラスに
{
"foo":"bar",
"body":{"a":"b"}
}
デシリアライズ:
public class Message {
public String foo;
public String bar; //I want this to be a raw JSON string, not parsed
}
コード:
String input = "{\"foo\":\"bar\", \"body\":[\"blah\"]}";
Message message = gson.fromJson(input, Message.class);
message.foo; //"bar"
message.body; //"[\"blah\"]"
これは可能ですか?
UPDATE:
私は現在、これをやっているが、それは「クリーン」で何とかネイティブString
タイプを使用することができれば、それはいいだろう...
public class Message {
public String foo;
public JsonString body;
}
public static class JsonString {
public String body;
}
public static class JsonStringDeserializer implements JsonDeserializer<JsonString> {
@Override
public JsonString deserialize(JsonElement json, Type type, JsonDeserializationContext context) {
JsonString a = new JsonString();
a.body = json.toString();
return a;
}
}
事IドンこれについてLIKE」tは、私はそうのような非直列化オブジェクトを使用しなければならないことである。
Message message = gson.fromJson(input, Message.class);
//notice how i have to use the inner string
SomeClass cls = gson.fromJson(message.body.body, SomeClass.class);
私は、カスタム注釈と 'JsonDeserializer'を実装する自分のクラスを作成したいと思います。 'JsonElement'を' String'として保持するように 'deserialize'実装を記述してください。 'GsonBuilder'の' registerTypeAdapter'を使い、このアノテーションを認識している 'Gson'を構築することができます。 –
jacob
私の更新された質問をご覧ください!私は似たようなことをやったと思いますが、それはやや望ましくないかもしれません。 – tau