Java 序列化嵌套对象json

Java 序列化嵌套对象json,java,json,serialization,jackson,objectmapper,Java,Json,Serialization,Jackson,Objectmapper,我正在使用Jackson json库将POJO转换为json: public class A { public String name; public B b; } public class B { public Object representation; public String bar; } 我想将A的实例序列化为JSON。我将使用中的ObjectMapper类: objectMapper

我正在使用Jackson json库将POJO转换为json:

    public class A {
        public String name;
        public B b;
    }

    public class B {
        public Object representation;
        public String bar;
    }
我想将
A
的实例序列化为JSON。我将使用中的
ObjectMapper
类:

objectMapperPropertiesBuilder.setSerializationFeature(SerializationFeature.WRAP_ROOT_VALUE);
objectMapperPropertiesBuilder.setAnnotationIntrospector(new CustomAnnotionIntrospector());
这里,annotation introspector选择根元素,因为所有这些都是带有注释的JAXB类,如
@XmlRootElement
@XmlType

例如:如果我在
对象中设置了
表示:

    public class C {
        public BigInteger ste;
        public String cr;
    }
使用此代码,我的JSON如下所示:

rootA: {
  "name": "MyExample",
  "b": {
    "rep": {
      "ste": 7,
      "cr": "C1"
    },
    "bar": "something"
  }
}
但是我希望根元素也附加到嵌套的
对象中。对象可以是任何自定义POJO

所以在本例中,我希望在JSON转换中附加类
C
的根元素。因此:

rootA: {
  "name": "MyExample",
  "b": {
    "rep": {
      "rootC": {
        "ste": 7,
        "cr": "C1"
      }
    },
    "bar": "something"
  }
}

如何在JSON转换中添加嵌套对象的根元素?我指定的所有
objectMapper
属性都将适用于
class A
。我必须编写自定义序列化程序才能将某些属性应用于嵌套对象吗?

您可以使用自定义序列化程序。但是,实现所需的最简单方法是使用
Map
包装
C
实例:

Map Map=newhashmap();
map.put(“rootC”,c);
您的课程将是:

@JsonRootName(value=“rootA”)
公共A类{
公共字符串名称;
公共B B;
}
公共B类{
@JsonProperty(“代表”)
公共对象表示;
公共字符串栏;
}
公共C类{
公共大整数ste;
公共字符串cr;
}
创建JSON的代码如下:

A A=新A();
a、 name=“MyExample”;
B=新的B();
b、 bar=“某物”;
C=新的C();
c、 cr=“C1”;
c、 ste=新的大整数(“7”);
a、 b=b;
Map Map=newhashmap();
map.put(“rootC”,c);
b、 代表性=地图;
ObjectMapper mapper=新的ObjectMapper();
启用(SerializationFeature.WRAP\u ROOT\u值);
enable(SerializationFeature.INDENT_输出);
字符串json=mapper.writeValueAsString(a);
生成的JSON是:

{
“rootA”:{
“名称”:“MyExample”,
“b”:{
“代表”:{
“rootC”:{
“ste”:7,
“cr”:“C1”
}
},
“酒吧”:“某物”
}
}
}

请注意,您在问题中提供的JSON无效。您可以验证它们。这是可行的,但设置输入不在我手中。我填充了一个对象,我必须序列化它,所以我不是设置
Map
(客户机这样做)的那个人。所以我应该选择Custom serializer?如果我选择Custom serializer,我只希望
表示
部分使用自定义方式序列化,其余所有属性都使用我在根类中设置的
ObjectMapper
属性序列化。如何实现这一点?此外,我的POJO也无法编辑注释。必须使用
ObjectMapper