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

时间:2016-10-28 01:36:58

标签: java json jackson

如何在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可能包含已知的强类型类,例如使用标准Jackson实现序列化的示例中的User用户。

我能找到的大多数例子,例如http://www.baeldung.com/jackson-inheritance都假设子类的数量是已知的,但在我的情况下却不知道,框架的用户会自己添加。

理想情况下,实现只会解析类型,让Jackson完成序列化的其余部分而不重复该代码。

1 个答案:

答案 0 :(得分:2)

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

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