强制JSON.NET将XML转换为JSON数组

3

我正在使用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 - dbc
我找到了一个更好的答案,但是由于它已经关闭了,我就在这里回答吧!将这些属性添加到您的 XML 节点中:json:Array="true" xmlns:json="http://james.newtonking.com/projects/json" 如果您正在从 Json 转换生成您的 xml,您可以使用方法 JsonConvert.DeserializeXmlNode(json, "RootName", true); 其中第三个参数是“编写数组属性”。 - Daniel
2个回答

10
如果您事先了解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;
}

0

如果您从XML文档中创建一个对象数组(需要了解内容结构并使用POCO对象),然后使用json序列化该列表,这不应太大程度地影响您的性能。在您的情况下有意义吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接