3
我在Java 7中使用Gson解析器。我想將我的一個屬性保留爲原始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;
}
}
事情我不「噸像這個是我必須使用反序列化對象,像這樣:
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';並以這種方式寫'deserialize'實現,以將'JsonElement'作爲'String'持久化。然後,您可以使用'GsonBuilder'的'registerTypeAdapter'來構造一個知道這個註解的'Gson'。 –
jacob
請看我更新的問題!我想我做了類似的事情,但它有點不受歡迎(儘管如此,也許是不可避免的)。 – tau