可以说我有一组A,B,C类:

公开课A:
整数

公共B类:
整数
字符串地址;

公开课C:
int orderNumber;

我如何反序列化仅包含这些类但顺序未知的Json字符串(使用Java中的Gson)?例如:

{//A
"number" : 3
}
//C
{
"orderNumber": 10
}
//B
{
"number" : 5
"address" : "New York"
}
//C
{
"orderNumber": 1
}


非常感谢你!

最佳答案

如果像他所说的那样,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);

10-06 10:59