杰克逊反序列化:自定义对象工厂

珍妮佛(Jennifer P.)

如何在Jackson中根据json中指定的类类型实现从json到Java对象的转换。

示例Java类型:

public class Car{
    public String make;
    public String model;
}

public class Spoon {
    public String material;
}

public class Ownership {
    public List<Object> items;
    public User owner;
}

示例Json:

{
    "items": [
        {
            "@class": "com.example.Car",
            "make": "Mercedes-Benz",
            "model": "S500"
        },
        {
            "@class": "com.example.Spoon",
            "material": "silver"
        }            
    ],
    "owner": {
        "name": "John"
    }
}

由于类的数量未知(用户可以添加任何类),因此无法使用批注@JsonSubTypes。

另外,json可能包含已知的强类型类,例如示例中的对象User(使用标准Jackson实现序列化)。

我可以找到的大多数示例,例如http://www.baeldung.com/jackson-inheritance都假定知道子类的数量,但在我不知道的情况下,框架的用户将添加自己的子类。

理想情况下,实现将只解析类型,并让Jackson进行其余的序列化操作,而无需重复该代码。

珍妮佛(Jennifer P.)

可以使用集合上的注释来解决:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,
              include = JsonTypeInfo.As.PROPERTY,
              property = "@class")
public List<Object> items;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用writeValueAsString序列化的对象后杰克逊反序列化失败

杰克逊反序列化不是在自定义解串器调用反序列化

自定义JSON序列化从Java科特林元杰克逊

杰克逊,反序列化嵌套对象

杰克逊自定义序列化和反序列化

如何自定义序列化杰克逊日期,@JsonSerialize不工作

杰克逊:反序列化的自定义XML中的属性POJO

杰克逊(Jackson)如何在自定义序列化器/反序列化器中检索父bean

如何在自定义序列化程序中访问默认的杰克逊序列化

用杰克逊反序列化为自定义对象的HashMap

杰克逊反序列化对象或数组

使用杰克逊可自定义序列化和反序列化

如何在杰克逊中编写自定义属性反序列化器

杰克逊自定义反序列化器无法在春季启动中工作

具有自定义条件的杰克逊多态反序列化

无需编写自定义序列化器和/或反序列化器,即可对第三方类进行杰克逊序列化和反序列化

使用杰克逊反序列化包含@JsonFormat(shape = JsonFormat.Shape.ARRAY)和自定义对象的json

使用杰克逊的对象数组的自定义序列化器

杰克逊自定义日期序列化器

杰克逊使用自定义日期格式错误地反序列化Joda日期

在自定义序列化器杰克逊内部配置objectmapper?

使用杰克逊将自定义反序列化类添加到已经存在的@JsonDeserialize批注中

杰克逊:如何反序列化嵌套的自定义地图和列表?

杰克逊将地图序列化到自定义输出列表

杰克逊自定义序列化对象

杰克逊:反序列化map <String,Object>到自定义嵌套Pojo

杰克逊不反序列化子列表对象

杰克逊自定义序列化程序:将对象更改为简单的属性和包含对象的值

杰克逊自定义序列化器JSON格式