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 的未知属性。
打开此选项会产生预期的输出。
我有一个 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 的未知属性。
打开此选项会产生预期的输出。