如何在序列化/反序列化 JSON 时擦除实例类型



我使用fasterxml来序列化/反序列化JSON

public class A {
    String field;
    B b;
}
public class B {
    int n;
}

我想获取这样格式的 JSON

{
  "field": "abc",
  "n": 123
}

可能吗?

您可以使用杰克逊注释来提供特定的反序列化程序。

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

注意字段的可访问性,否则它将不起作用。

在Java中没有办法做到这一点。

相关内容

  • 没有找到相关文章

最新更新