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

yqlxgs2m  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(179)

我有一个JSON,其结构如下:

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

myList是目标类中的List<MyClass>。此MyClass只有myBool字段,该字段可使数组的第一个元素正确反序列化,但不幸的是,反序列化第二个元素会导致反序列化失败,并显示错误消息Unknown property 'myBool' for class my.package.MyClass at JSON path $.otherfield
有没有办法忽略JSON中不存在于反序列化的目标类中的字段?也许是因为嵌套的对象?
我已经尝试过添加一个自定义类型适配器,如seen here,但它甚至没有调用该方法(目标类是一个记录,这就是为什么我必须使用第三方库com.github.Marcono1234:gson-record-type-adapter-factory来反序列化它)

ilmyapht

ilmyapht1#

AFAIK,Gson在反序列化时会自动忽略未知字段。因此,我假设您已经创建了这两个类,如下所示:

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());

控制台输出:
我的结果{第一个属性=真,这个是字符串='hi',我的列表=[我的类{我的布尔值=真},我的类{我的布尔值=假}]}

wyyhbhjk

wyyhbhjk2#

我发现了这个问题,我用来反序列化为记录的第三方库有一个TypeAdapterFactory,它有一个忽略未知属性的选项,默认设置为false。
启用此选项将产生预期的输出。

相关问题