【问题标题】:Force JSON.NET to convert xml to json array [duplicate]强制 JSON.NET 将 xml 转换为 json 数组 [重复]
【发布时间】:2017-09-16 20:22:16
【问题描述】:

我正在使用 JSON.NET 将一些 XML 转换为 JSON。

我的 XML 如下所示:

<Root>
    <Product>
        <Name />
        <Id />
    </Product>
    <Product>
        <Name />
        <Id />
    </Product>
</Root>

我正在使用这种方法转换 xml:

private string ConvertToJson(string xml)
{
    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.LoadXml(xml);

    var JsonString = JsonConvert.SerializeXmlNode(XmlDoc);
    return JsonString;
}

只要有多个产品,这都可以正常工作,JSON.NET 将创建一个 JSON 数组。 但是,如果只有一种产品 JSON.NET 不会创建 JSON 数组,但我需要它。

有什么方法可以强制它创建一个 JSON 数组?

【问题讨论】:

  • 这是专门为XmlDocument量身定制的答案:JSON.Net Xml Serialization misunderstands arrays
  • 我找到了更好的答案,但由于已关闭,我将在这里回答!将这些属性添加到您的 XML 节点: json:Array="true" xmlns:json="james.newtonking.com/projects/json" 如果您从 Json 转换生成 xml,您可以使用方法 JsonConvert.DeserializeXmlNode(json, "RootName", true) ;其中第三个参数是“写入数组属性”

标签: c# .net json json.net


【解决方案1】:

如果您事先知道 XML 架构,则可以通过将 json:Array="true" 附加到要转换为数组的节点来强制生成数组

static string convertToJson(string what)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(what);

    var products = doc.GetElementsByTagName("Product");

    if (products.Count == 1)
    {
        var attribute = doc.CreateAttribute("json", "Array", "http://james.newtonking.com/projects/json");
        attribute.InnerText = "true";
        var node = products.Item(0) as XmlElement;
        node.Attributes.Append(attribute);
     }

     string json = JsonConvert.SerializeXmlNode(doc);

     return json;
}

【讨论】:

    【解决方案2】:

    如果您从 XML 文档在代码中创建对象数组(您需要了解内容结构并使用 POCO 对象),然后使用 json 序列化该列表,则不会对您的性能产​​生太大影响。在你的情况下有意义吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多