我知道Gson没有类似的功能,但有没有办法以@JsonUnwrap的方式添加对展开Json字段的支持?
目标是允许以下结构:
public class Person {
public int age;
public Name name;
}
public class Name {
public String first;
public String last;
}
被(de)序列化为:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
代替:
{
"age" : 18,
"name" : {
"first" : "Joey",
"last" : "Sixpack"
}
}
我知道它可能变得相当复杂,所以我不是在寻找一个完整的解决方案,只是一些高级指导,如果这是可行的.
最佳答案 目前,没有简单的方法可以做到这一点.无论如何,这里有一些指示/替代方法使其工作.
GsonFire:GsonFire实现了Gson缺少的一些有用功能.虽然它还没有提供自动包装/展开,但它可能是创建自定义逻辑的一个很好的起点.
如果您只需要序列化,则可以在Person中添加第一个和最后一个的getter,并使用@ExposeMethodResult
序列化它们.不幸的是,不支持setter(参见Is possible to use setters when Gson deserializes a JSON?).
支持序列化的另一种方法是遵循How to move fields to parent object中的建议.
Custom TypeAdapters:支持序列化和反序列化的唯一方法是创建自定义TypeAdapter.这不是通用的,但它适合您的用例.
线程Serialize Nested Object as Attributes已经为您提供了示例,因此我在此不再赘述.