Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用(反)序列化Jackson中具有多态项的列表_Java_Json_Jackson - Fatal编程技术网

Java 无法使用(反)序列化Jackson中具有多态项的列表

Java 无法使用(反)序列化Jackson中具有多态项的列表,java,json,jackson,Java,Json,Jackson,我在序列化JSON时遇到了一个我没有定义的问题 下面是一些解释问题的代码和JSON: 代码: 如果我将JsonTypeInfo注释更改为 @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT, property="type") 产生 {"items":[["sub1",{"klass":"Sub1"}],["sub1",{"klass":"Sub1"}]]} {"items":[{

我在序列化JSON时遇到了一个我没有定义的问题

下面是一些解释问题的代码和JSON:

代码:

如果我将JsonTypeInfo注释更改为

    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT, property="type")
产生

{"items":[["sub1",{"klass":"Sub1"}],["sub1",{"klass":"Sub1"}]]}
{"items":[{"sub1":{"klass":"Sub1"}},{"sub1":{"klass":"Sub1"}}]}
到目前为止,一切都很好:)

但是,我从服务器获得的JSON的结构略有不同:

{"type":"sub1", "items":[{"klass":"Sub1"},{"klass":"Sub1"}]}
其中项目数组的类型在“type”属性中定义(请注意,“items”数组中的所有项目都属于同一类)。
我只是不知道使用哪个JsonTypeInfo组合来实现这一点。我尝试将“include”设置为“.EXTERNAL_属性”,但这不起作用。
使用此包含进行反序列化会给我“线程中的异常”main“org.codehaus.jackson.jsongGenerationException:无法写入字段名,需要值”错误消息

我的问题是:我需要使用哪个注释,以便“{”type“:“sub1”,“items”:[{”klass“:“sub1”},{”klass“:“sub1”}]}”将根据持有者的“type”属性使用所有sub1实例填充“items”数组?
如果这是不可能的,是否有其他方法来实现这一点(不需要为Holder使用自定义序列化程序;只为“items”数组使用自定义序列化程序就可以了)


谢谢

无法映射自动显示的JSON;它不是Jackson支持的4种类型之一


若你们不能使服务器产生更标准的结构(自动支持),你们需要编写一个自定义的反序列化程序;或者分两步进行数据绑定,首先进入一个容易映射的中间结构(如
JsonNode
Map
),然后从该结构手动提取所需的类型,使用该类型(例如,使用
ObjectMapper.convertValue(object,resultType)
,这也是我担心的:)谢谢你的回答。没问题,很抱歉成为厄运的预兆。:)@StaxMan,如果有任何解决方案,请更新答案。另外,请注意这个问题-@localhost不知道有任何新的解决方案。奇数JSON的数量是无限的,因此如果没有手动反序列化程序,这不可能得到支持。@localhost您希望得到什么样的答案?为什么你认为这个答案已经过时了?@SotiriosDelimanolis因为在2013年被问到了这个问题,Jackson发展了一点,也许有一个答案可以自动完成它。@localhost我相信StaxMan是Jackson的开发者之一,他们在堆栈溢出问题上很活跃。你可能想对他们的回答发表评论。@SotiriosdelimanolisTyvm,我会问他的!
{"type":"sub1", "items":[{"klass":"Sub1"},{"klass":"Sub1"}]}