java - Gson - 反序列化未知类

标签 java json gson

假设我有一组 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/

相关文章:

java - API 调用中的 HTML 实体编码不正确

java - 如何在单元测试时处理第 3 方依赖项

java - 如何在 Jackson 中使用自定义序列化程序?

javascript - 使用 JSON 递归

java - 从 Java 类创建 JSON 模式

java - JSON 数组反序列化导致 Dalvik VM 崩溃

java - 如何实现Comparable类

java - 如何在通过构造函数接收参数的类中使用@SpyBean?

javascript - 哪些本地数据库可用于 Javascript?

java - Gson 嵌套无名数组