JsonIdentityInfo导致对象被序列化为Ids,然后无法反序列化它们

时间:2017-02-17 03:19:12

标签: jackson deserialization jsonidentityinfo

使用JsonIdentityInfo时,我遇到了数组反序列化的问题。序列化正确进行,并且数组包含一些有循环引用的ID。但是,我无法弄清楚如何将ID反序列化为对象。我得到一个包含一些对象和一些字符串的数组。 [我将UUID用于ids

@JsonIdentityInfo(
generator=ObjectIdGenerators.UUIDGenerator.class,
property="_lineItemExternalId",
scope=LineItemExternal.class
)

数组序列化为

{ 
"@class":".WebServiceResponseArrayImpl",
"responseCode":0,
"responseMessage":"OK",
"systemTime":1486803868384,
"data":[ 
"[Ljava.io.Serializable;",
[ 
[ 
"in.cloudnine.nanoerp.model.inventory.LineItemExternal",
{ 
"lineItemExternalId":"0379de02-d67d-42b1-a764-d2c53f90e474",
"bags":40,
"serialNumber":"1",
"kgs":2000.00,
"manufacturerBatchNumber":"55",
"rate":250.00,
"subtotal":500000.00,
"virgin":true,
"color":{ 
"_colorId":"4a811a32-2057-4759-b07f-3d70f1a8ec4a",
"company":"abb1f7e2-c42f-43e6-8b44-341fe744d4c2",
"date":"2017-01-22",
"createdOn":"2017-02-09",
"modifiedOn":"2017-02-09",
"systemUser":"f46e9a61-670d-491c-8571-ba7b2e1a55e7",
"colorId":"85f91038-1e6a-4c73-a2f6-4c0e16e48f7f",
"code":"MG",
"name":"Magenta",
"value":null
},
"manufacturer":{ 
"_manufacturerId":"80a63b5e-33db-4b13-84cc-b9f591ea6b78"
}
}
],
"cee9d79b-77a9-4b3b-a376-ead1d6347d03",
"a15661e1-b4d4-4145-8db8-4e66ad0e4f81"
]
]
}

此处," cee9d79b-77a9-4b3b-a376-ead1d6347d03"和" a15661e1-b4d4-4145-8db8-4e66ad0e4f81"是LineItemExternal ids,它已在上面的json中完全序列化。 [为简洁起见删除]

抛出错误的代码是

Object[]array=createBeanArrayLineItemExternal();
System.out.println("Length of Array:"+array.length);
for(Object obj:array){
LineItemExternal item=(LineItemExternal)obj;
System.out.println(item);
}
}
catch(ClassCastException e){
e.printStackTrace();
}

抛出ClassCastException,表示String无法强制转换为LineItemExternal。这意味着数组包含一个对象和两个字符串[Ids]

我是否需要自定义反序列化器,或者是否可以配置对象映射器来自动执行此操作?

我之前询问过disqus的问题,下面是项目src的链接。

https://github.com/ks1974in/DeserializationTestForJson.git

示例输入json位于项目文件夹中的文件input.json中。测试用例包在in.cloudnine.inventory.test中; 它是TestSerializationAndDeserialization 失败的测试是testWithFile()

很抱歉包含这么多代码。但以前的测试代码有限,所有成功。但是,上面的测试确实因类强制转换异常而失败

谢谢, Sagar的

请帮帮我。

0 个答案:

没有答案