如何用Jackson将抽象类ABC序列化为转义JSON并反序列化
Jackson 抽象子类转义JSON序列化/反序列化需求
抽象类定义
@JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION) @JsonSubTypes({ @JsonSubTypes.Type(A.class), @JsonSubTypes.Type(B.class), @JsonSubTypes.Type(C.class) }) public abstract class ABC {}
子类实现
public class A extends ABC { int attribute1; String attribute2; // getters and setters follow } public class B extends ABC { int attribute3; // getters and setters follow } public class C extends ABC { int attribute4; String attribute5; String attribute6; // getters and setters follow }
序列化/反序列化需求
需要将这些子类对象序列化为转义后的JSON字符串,同时支持反向反序列化:
- 示例:A类对象的原始JSON结构为:
{ "attribute1" : 1, "attribute2" : "string" }
序列化后需输出:
"{\"attribute1\":1,\"attribute2\":\"string\"}"
API调用要求
必须保持Jackson默认API调用方式不变:
序列化调用示例
ObjectMapper mapper = // 初始化mapper实例 ABC obj = // 初始化ABC子类对象 mapper.writeValueAsString(obj); // 返回转义后的JSON字符串
反序列化调用示例
ObjectMapper mapper = // 初始化mapper实例 String json = // 对应ABC子类的转义JSON字符串 mapper.readValue(json, ABC.class); // 返回对应的ABC子类对象
额外要求
解决方案需支持两种使用场景:
- ABC对象作为独立对象使用
- ABC对象作为其他类的属性使用
内容的提问来源于stack exchange,提问作者Qais Abou Housien
相关产品推荐
相关产品推荐

