假设我有一个类 A 的对象,它包含对类 B 的对象的引用,以及对类 C 的对象的引用。类 B 的对象也包含对 C 的引用:
A -> C (1) A -> B -> C (2)
我希望序列化类 A 的对象,使其包含来自引用的字段 c1 和 c2 ( 1)和不同的领域,例如 c2 和 c3 来自参考文献(2):
A { C { c1: ... c2: ... }, B { C { c2: ... c3: ... } } }
通常,GSON或Jackson可以从特定类的所有对象中排除字段,例如 c1 和 c2 (在两个引用中都是排除的)。
有没有办法精确选择哪些字段应该序列化哪些字段不在GSON或Jackson中? 或者如果没有,如何以其他方式进行(手动,没有GSON / Jackson)?
答案 0 :(得分:1)
使用杰克逊的@JsonSerialize
+ custom serializer
。
class A {
@JsonSerialize(using = C1Serializer.class)
C c;
B b;
}
class B {
@JsonSerialize(using = C2Serializer.class)
C c;
}
// you can do a lot of stuff in a custom serializer
class C1Serializer extends JsonSerializer<C> {
static class FirstTwoFields {
int c1
int c2
public FirstTwoFields(C c) {
c1 = c.c1;
c2 = c.c2;
}
// getter and setters or delegate c's instead
// .......
}
public void serialize(C c,
JsonGenerator jgen,
SerializerProvider provider){
jgen.writeObject(new FirstTwoFields(c));
}
}