我注意到在从JSON转换为XML时,如果我的一个JSON对象为null,则该对象不存在于XML中,例如
JSON
C:\Windows
转换为XML输出(marshalString)
C:\Windows\System32\cmd.exe
{
"name": {
"namespaceURI": "",
"localPart": "myApp",
"prefix": "",
"key": "myApp",
"string": "myApp"
},
"value": {
"TYPE_NAME": "generated.MyApp",
"inputData": [{
"TYPE_NAME": "generated.MyApp.InputData",
"dataType": "text",
"mandatory": false,
"length": 25,
"valid": true,
"value":null
}]
}
}
然后再转换回JSON(unmarshalString)
var context2 = new j.Context([generated2]);
var marshaller2 = context2.createMarshaller();
var objectAsXMLString2 = marshaller2.marshalString(template2);
<myApp>
<inputData>
<dataType>text</dataType>
<mandatory>false</mandatory>
<length>25</length>
<valid>true</valid>
</inputData>
</myApp>
如您所见,信息丢失了。当发生完整的转换循环时,JSON - &gt; XML - &gt;回到JSON,一些属性不会被保留。任何null都会被删除 - 在这种情况下,它是属性'value'。对于期望某些属性存在于对象上的下游应用程序而言,这是一个问题。
用于生成jsonix映射对象的XML模式如下所示
var unmarshaller2 = context2.createUnmarshaller();
var resultJSON2 = unmarshaller2.unmarshalString(objectAsXMLString2 );
使用jsonix-schema-compiler生成的映射是
{
"name": {
"namespaceURI": "",
"localPart": "myApp",
"prefix": "",
"key": "myApp",
"string": "myApp"
},
"value": {
"TYPE_NAME": "generated.MyApp",
"inputData": [{
"TYPE_NAME": "generated.MyApp.InputData",
"dataType": "text",
"mandatory": false,
"length": 25,
"valid": true
}]
}
}
有没有办法在转换过程中保留所有属性,即使它们为空?
答案 0 :(得分:0)
目前不是。
我认为您正在寻找的是对nillable
元素的支持,因为您可能希望将空字符串作为值来区分null
与缺少属性与属性。
Jsonix目前不支持nillable
元素。