如何在serializing/deserializingJSON时擦除一类实例?
How to erase a type of instance when serializing/deserializing JSON?
我用fasterxml
到serialize/deserializeJSON
public class A {
String field;
B b;
}
public class B {
int n;
}
我想得到一个 JSON 这样格式的
{
"field": "abc",
"n": 123
}
可能吗?
在 Java 中无法做到这一点。
您可以使用 Jackson 注释来提供特定的反序列化器。
@JsonDeserialize(using = ADeserializer.class)
public class A {
private String field;
private B b;
// ...
}
你的类型的反序列化器应该是这样的
public class ADeserializer extends JsonDeserializer<A> {
@Override
public A deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
ObjectCodec codec = p.getCodec();
JsonNode node = codec.readTree(p);
String field = node.get("field").asText();
int n = node.get("n").asInt();
A a = new A();
B b = new B();
b.setN(n);
a.setField(field);
a.setB(b);
return a;
}
}
对于序列化,可以使用自定义序列化程序。就是这样。
您可以简单地使用 @JsonUnwrapped
。不需要自定义序列化程序:
public class A {
public String field;
@JsonUnwrapped
public B b;
}
public class B {
public int n;
}
注意字段的可访问性,否则将不起作用。
我用fasterxml
到serialize/deserializeJSON
public class A {
String field;
B b;
}
public class B {
int n;
}
我想得到一个 JSON 这样格式的
{
"field": "abc",
"n": 123
}
可能吗?
在 Java 中无法做到这一点。
您可以使用 Jackson 注释来提供特定的反序列化器。
@JsonDeserialize(using = ADeserializer.class)
public class A {
private String field;
private B b;
// ...
}
你的类型的反序列化器应该是这样的
public class ADeserializer extends JsonDeserializer<A> {
@Override
public A deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
ObjectCodec codec = p.getCodec();
JsonNode node = codec.readTree(p);
String field = node.get("field").asText();
int n = node.get("n").asInt();
A a = new A();
B b = new B();
b.setN(n);
a.setField(field);
a.setB(b);
return a;
}
}
对于序列化,可以使用自定义序列化程序。就是这样。
您可以简单地使用 @JsonUnwrapped
。不需要自定义序列化程序:
public class A {
public String field;
@JsonUnwrapped
public B b;
}
public class B {
public int n;
}
注意字段的可访问性,否则将不起作用。