假设我有一组 A、B、C 类:
公共(public)A类: 整数;
公共(public)B类: 整数; 字符串地址;
公共(public)类C: int 订单号;
如何反序列化仅包含这些类但顺序未知的 Json 字符串(在 Java 中使用 Gson)?例如:
{//A
"number" : 3
}
//C
{
"orderNumber": 10
}
//B
{
"number" : 5
"address" : "New York"
}
//C
{
"orderNumber": 1
}
非常感谢!
最佳答案
如果像他所说的那样,您的类(class)像您提供的那样简单,那么 pirho 的回答是干净而简单的。但如果情况并非如此,您可以编写自己的解串器。
public class PayloadJsonDeserializer implements JsonDeserializer {
@Override
public Object deserialize(JsonElement elm, Type type, JsonDeserializationContext context) throws JsonParseException {
// create java objects based on the properties in the json object
JsonPrimitive orderNumber = elm.getAsJsonObject().getAsJsonPrimitive("orderNumber");
if(!orderNumber.isJsonNull()) {
return new C(orderNumber.getAsInt());
}
return null;
}
}
向 Gson 注册您的自定义解串器。
GsonBuilder gsonBuilder = new GsonBuilder()
.registerTypeAdapter(PayloadJson.class, new PayloadJsonDeserializer());
Gson gson = gsonBuilder.create();
用它来反序列化你的 json。
gson.fromJson(jsonString, PayloadJson[].class);
关于java - Gson - 反序列化未知类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47968957/