使用JSONIX在编组/解组期间删除空属性

时间:2017-08-17 14:20:25

标签: jsonix

我注意到在从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 }] } }

有没有办法在转换过程中保留所有属性,即使它们为空?

1 个答案:

答案 0 :(得分:0)

目前不是。

我认为您正在寻找的是对nillable元素的支持,因为您可能希望将空字符串作为值来区分null与缺少属性与属性。

Jsonix目前不支持nillable元素。