Json 使用jackson反序列化lazylist

Json 使用jackson反序列化lazylist,json,jackson,deserialization,lazylist,Json,Jackson,Deserialization,Lazylist,我有一个对象,它使用org.apache.commons.collections.list.LazyList作为它的一个字段,这个字段是序列化的ti JSON。JSON如下所示: "myObject": ["org.apache.commons.collections.list.LazyList", [ { "attr1": "asdasd", "attr2": 1234

我有一个对象,它使用
org.apache.commons.collections.list.LazyList
作为它的一个字段,这个字段是序列化的ti JSON。JSON如下所示:

        "myObject": ["org.apache.commons.collections.list.LazyList", [
            {
                "attr1": "asdasd",
                "attr2": 1234
            }
        ]],
List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)
对象字段如下所示:

        "myObject": ["org.apache.commons.collections.list.LazyList", [
            {
                "attr1": "asdasd",
                "attr2": 1234
            }
        ]],
List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)
List myObject=ListUtils.lazyList(新ArrayList(),{new myObject()}作为工厂)
然而,尝试使用Jackson ObjectMapper反序列化上面的JSON失败了,因为它找不到LazyList的默认构造函数——这很有意义。但是如何指定此字段的反序列化方式

错误消息:

[collection type;class org.apache.commons.collections.list.LazyList,包含[simple type,class foo.bar.MyObject]]没有默认构造函数

赏金限制:


要收集赏金,需要使用自定义jackson反序列化程序回答此问题-自定义反序列化程序不能是特定于字段的!因此,对特定类型使用LazyList自定义实现的解决方案无法充分回答此问题。

下面的解决方案适用于列表和地图集合对象,也可能适用于您的对象

@JsonDeserialize(contentAs=MyObject.class)
private List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory);
@JsonDeserialize(contentAs=MyObject.class)
私有列表myObject=ListUtils.lazyList(新的ArrayList(),{new myObject()}作为工厂);

你应该在问题中加入悬赏文本,因为这与正确回答问题有关。没有办法使这与所有内容100%兼容。由于数据丢失,您必须做出假设,例如LazyList的支持列表实现和工厂。不做这些假设的唯一方法是以某种方式将这些信息添加到序列化的JSON中。您可以编写自己的序列化程序来使用反射添加该信息,并使用反序列化程序来使用该信息(同样,使用反射)创建LazyList对象,但您仍在做出假设,例如您的工厂有0-arg构造函数。在google搜索“java反射”并使用它获取序列化程序的受保护
集合
工厂
变量以及反序列化程序的构造函数。或查看其他问题以获得帮助,例如: