【问题标题】:How to serialize empty arrays when converting to XML with Json.Net使用 Json.Net 转换为 XML 时如何序列化空数组
【发布时间】: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 似乎不起作用。

【问题讨论】:

    标签: c# xml arrays serialization json.net


    【解决方案1】:

    我认为意思有问题。我个人认为,Json 库完成的转换是好的,你不能得到你提出的两个结果之一。 建议的每个场景中的标签并不意味着(从 XML 的角度来看)它是一个空数组。但这意味着属性(不是数组) EmptyCollection 是空的。你会失去一些东西。

    我建议您将标签的缺失测试为“无信息”,也就是“数组中没有条目”

    【讨论】:

    • 空元素和空集合并不严格相同,但它比当前更接近转换。目前它是有损的。我需要能够将其转换回来,但这是不可能的,因为它指出该字段是必需的并且缺少。
    • 如果您需要该字段,一种常见的方法应该是定义一个空元素。在许多算法中,例如在红黑树中,叶子不是具有两个空指针的节点,而是具有空值的节点。所以取而代之的是: 您可以尝试获取: null (仅作为示例)可能你需要使用 Json 作为源,例如: { Collection:[ { myelem: null } ] } 希望这会有所帮助。
    • 我有一个正在序列化的大型对象图,我真的不想检查所有集合并向它们添加空项并稍后再次删除它们。
    • 一个机会是在每种情况下都将空元素添加为最后一个。 (就像在 C-String 中一样)。所以你的“JSON数组/XML标签”每次都充满了一些东西,很容易检测或跳过
    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多