gpt4 book ai didi

java - 在 GSON/Jackson 中以不同的方式序列化同一类的每个引用

转载 作者:行者123 更新时间:2023-12-01 12:18:50 24 4
gpt4 key购买 nike

假设我有一个 A 类的对象,其中包含对 B 类对象的引用,以及对 C 类对象的引用。 B 类的对象也包含对 C 的引用:

A -> C         (1)
A -> B -> C (2)

我想序列化A类的对象,使其包含来自引用的字段c1c2( 1)以及不同的领域,例如引用文献 (2) 中的 c2c3:

A {
C {
c1: ...
c2: ...
},
B {
C {
c2: ...
c3: ...
}
}
}

通常,GSON 或 Jackson 可以从特定类的所有对象中排除字段,例如始终排除 c1c2(在两个引用文献中)。

有什么方法可以精确选择哪些字段应该在 GSON 或 Jackson 中序列化,哪些字段不应该序列化?或者如果没有,如何以其他方式执行此操作(手动,无需 GSON/Jackson)?

最佳答案

使用 Jackson 的 @JsonSerialize + 自定义序列化程序

像这样:

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));
}

}

关于java - 在 GSON/Jackson 中以不同的方式序列化同一类的每个引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com