[英]Can you group JSON serialization by property Type
假设我有一个像这样的POJO:
class POJO1 {
TypeA getFirst();
TypeA getSecond();
TypeB getThird();
String getName();
}
我正在寻找一个将输出以下内容的自定义序列化程序:
{ "A" : [ serializationOf(first), serializationOf(second) ], "B" : serializationOf(second), "name" : valueOfName() }
但这是要抓住的地方,它并不特定于POJO1。 这意味着对于另一个POJO也会发生相同的序列化:
class POJO2 {
TypeA getFirst();
TypeA getSecond();
TypeB getThird();
String getName();
}
或具有TypeA或TypeB属性的任何类,这意味着方法可以更改。 我宁愿不要以基类或接口为目标,因为开发我从未想过的其他类的人会使用我的序列化器。 我一直在寻找注册TypeA和TypeB序列化器,但它们似乎不允许我更改json对象的键,也无法以任何方式对相似类型进行分组。
似乎要获取的JSON文档与2个类的结构不同,因此不能对POJO1
和POJO2
使用绑定。 但是,您可以定义一个具有与想要获取的JSON相同结构的新类。 例如
class BindedPojo {
TypeA[] A;
TypeA B;
String name;
BindedPojo(TypeA a, TypeA b, String n) {
A = new TypeA[]{a, b};
B = b;
name = n;
}
}
然后序列化一个类型为POJO1
或POJO2
名为p1
的对象:
BindedPojo bp = new BindedPojo(p1.getFirst(), p1.getSecond(), p1.getName());
只需使用ObjectMapper
的writeValue
方法将bp
序列化为JSON。 此解决方案不需要POJO1
和POJO2
具有公共基类。 它还避免了对POJO1
和POJO2
的源代码的修改。
受Jackson的启发:如何在不修改POJO帖子的情况下向JSON添加自定义属性,我找到了我想要的东西。 这是4叉:
这使我没有任何额外的反射开销,并且我不必知道任何代码中的基本类型。 我不会丢失任何被其他开发者定义为序列化的bean所应用的注释(因为我使用Jackson自己的PropertyWriters)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.