使用 Json.Net 转换为 XML 时如何序列化空数组
Posted
技术标签:
【中文标题】使用 Json.Net 转换为 XML 时如何序列化空数组【英文标题】:How to serialize empty arrays when converting to XML with Json.Net 【发布时间】:2014-01-25 09:55:37 【问题描述】:我需要将一些 Json 转换为 XML,但是当我这样做时,它会删除所有空数组/列表/集合/等...
如何让它将数组包含为空项?
示例 Json:
"EmptyCollection": [],
"OtherPorperty\": "TestValue"
C#代码:
var jsonString = " \"EmptyCollection\": [], \"OtherPorperty\":\"TestValue\" ";
var xmlDoc = JsonConvert.DeserializeXmlNode(jsonString, "root", true);
Console.WriteLine(xmlDoc.InnerXml);
实际结果是
<root>
<OtherPorperty>TestValue</OtherPorperty>
</root>
想要的结果是
<root>
<EmptyCollection></EmptyCollection>
<OtherPorperty>TestValue</OtherPorperty>
</root>
or
<root>
<EmptyCollection />
<OtherPorperty>TestValue</OtherPorperty>
</root>
使用 writeArrayAtribute 似乎不起作用。
【问题讨论】:
【参考方案1】:我认为意思有问题。我个人认为,Json 库完成的转换是好的,你不能得到你提出的两个结果之一。 建议的每个场景中的标签并不意味着(从 XML 的角度来看)它是一个空数组。但这意味着属性(不是数组) EmptyCollection 是空的。你会失去一些东西。
我建议您将标签的缺失测试为“无信息”,也就是“数组中没有条目”
【讨论】:
空元素和空集合并不严格相同,但它比当前更接近转换。目前它是有损的。我需要能够将其转换回来,但这是不可能的,因为它指出该字段是必需的并且缺少。 如果您需要该字段,一种常见的方法应该是定义一个空元素。在许多算法中,例如在红黑树中,叶子不是具有两个空指针的节点,而是具有空值的节点。所以取而代之的是:以上是关于使用 Json.Net 转换为 XML 时如何序列化空数组的主要内容,如果未能解决你的问题,请参考以下文章
Json.NET XML 转换和 TypeNameHandling.Arrays
使用 Json.Net 进行 C# 枚举反序列化:将值转换为类型时出错
如何使用 Json.NET 将 XML 序列化为 JSON 对象