fastjson 在对象的属性上指定 SerializerFeature.WriteClassName 不起作用

vwoqyblh  于 2021-11-27  发布在  Java
关注(0)|答案(0)|浏览(436)

发现 SerializerFeature.WriteClassName这个如果是设置在 某一个对象的某一个属性字段上,在JSON.toJSONString的时候并不起作用, 不知道是设计如此还是用法不对?

假设有两个对象 A B :

@JSONType(serialzeFeatures = SerializerFeature.WriteClassName)
public class B {
    private String b;

    public B() {
    }

   getter/setter
}

public class A {

   // @JSONField(serialzeFeatures = SerializerFeature.WriteClassName) 加不加这个一样
    private B b;

    public A() {
    }
   getter/setter

}

那么在序列化的时候会有这样的结果:

@Test
public void testCase1(){
   B b = new B("bbbbb");
        A a = new A(b);

        System.out.println(JSONUtil.toJSONString(a));     // {"b":{"b":"bbbbb"}}
        System.out.println();
        System.out.println(JSONUtil.toJSONString(b));   // {"@type":"com.jcg.B","b":"bbbbb"}
        System.out.println();
        System.out.println(JSON.toJSONString(a, SerializerFeature.WriteClassName)); // {"@type":"com.jcg.A","b":{"b":"bbbbb"}}
        System.out.println();
        Map<String,Object> c = new HashMap<>();
        c.put("b",b);
        System.out.println(JSONUtil.toJSONString(c)); //{"b":{"@type":"com.jcg.B","b":"bbbbb"}}
}

我想要的效果,其实就是最后一种,也就是{"b":{"@type":"com.jcg.B","b":"bbbbb"}}

不知道要如何实现?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题