Gson 忽略嵌套对象中的太多属性

Gson ignore too many properties in nested object

我有一个 JSON 这种结构:

{
  "firstProperty": true,
  "thisIsAString": "hi",
  "myList": [
    {"myBool": true},
    {"myBool": false, "otherfield": true}
  ]
}

目标class中的myList是一个List<MyClass>。 这个 MyClass 只有 myBool 字段,它会导致数组的第一个元素正确反序列化,但不幸的是,反序列化第二个元素会导致它失败并显示错误消息 Unknown property 'myBool' for class my.package.MyClass at JSON path $.otherfield.

有什么方法可以忽略 JSON 中反序列化目标 class 中不存在的字段吗?可能是因为嵌套对象?

我已经尝试添加一个自定义类型的适配器,就像看到的 here 但它甚至没有调用方法(目标 class 是一个记录,这就是为什么我必须使用第三个派对库 com.github.Marcono1234:gson-record-type-adapter-factory 反序列化)

AFAIK,Gson 将在反序列化时自动忽略未知字段。因此,我假设您已经创建了这 2 个 类,它们看起来像:

public class MyClass {
    private Boolean myBool;

    // getter, setter and toString
}

public class MyResult {
    private Boolean firstProperty;
    private String thisIsAString;
    List<MyClass> myList;

    // getter, setter and toString
}

然后您可以按如下方式序列化您的 JSON 字符串:

String yourJsonStr = "" +
                "{\n" +
                "  \"firstProperty\": true,\n" +
                "  \"thisIsAString\": \"hi\",\n" +
                "  \"myList\": [\n" +
                "    {\"myBool\": true},\n" +
                "    {\"myBool\": false, \"otherfield\": true}\n" +
                "  ]\n" +
                "}";

Gson gson = new Gson();
MyResult myResult = gson.fromJson(yourJsonStr, MyResult.class);
System.out.println(myResult.toString());

控制台输出:

MyResult{firstProperty=true, thisIsAString='hi', myList=[MyClass{myBool=true}, MyClass{myBool=false}]}

我发现了这个问题,我用来反序列化到记录中的第三方库有一个 TypeAdapterFactory,它有一个选项可以忽略默认设置为 false 的未知属性。

打开此选项会产生预期的输出。