使用 JsonIdentityInfo 时数组反序列化有问题。序列化正确进行,并且数组包含一些存在循环引用的 Id。但是,我无法弄清楚如何将 id 反序列化为对象。我得到一个包含一些对象和一些字符串的数组。[我使用 UUID 作为 id
@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 id,在上面的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。这意味着该数组包含一个对象和两个字符串 [ID]
我需要自定义反序列化器还是可以将对象映射器配置为自动执行此操作?
我之前在disqus上问过这个问题,项目src的链接在下面。
https://github.com/ks1974in/DeserializationTestForJson.git
示例输入 json 位于项目文件夹中的文件 input.json 中。测试用例在包 in.cloudnine.inventory.test 中;它是 TestSerializationAndDeserialization 失败的测试是 testWithFile()
抱歉包含这么多代码。但是之前使用有限代码的测试都成功了。但是,上述测试确实因类转换异常而失败
谢谢,萨加尔
请帮我。