强制JSON.NET将xml转换为json数组

时间:2017-09-16 20:22:17

标签: c# .net json json.net

我正在使用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数组的方法吗?

2 个答案:

答案 0 :(得分:7)

如果您事先知道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;
}

答案 1 :(得分:0)

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