java – 如何实现@JsonUnwrap的Gson等价物

我知道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已经为您提供了示例,因此我在此不再赘述.

点赞