JsonConvert.SerializeXmlNode() 为数组添加额外的 child

JsonConvert.SerializeXmlNode() adds extra child for arrays

我正在使用 JsonConvert.SerializeXmlNode() 序列化一个 xml 节点:

var doc = new XmlDocument();
doc.LoadXml(xml.ToString());
jsonRequest = JsonConvert.SerializeXmlNode(doc);

这里是一个例子xml数组

<cars>
   <car>
     <id>0001</id>
   </car>
   <car>
     <id>0002</id>
   </car>
</cars>

这将变成:

{
   "cars" : {
       "car" : [{
          "carId" : "0001"
       }, {
          "carId" : "0002"
       }]
   }
}

有没有办法像这样序列化数组?

{
   "cars" : [{
          "carId" : "0001"
       }, {
          "carId" : "0002"
       }
   ]
}

我相信 XElement 在处理 xml 时是更好的选择,因为它较新。 我写了一个快速代码并进行了测试,它运行良好,可能它没有得到很好的优化和理想,但它在这里向您展示了前进的道路,希望它会有所帮助。

var xml = @"<cars><car><id>0001</id></car><car><id>0002</id></car></cars>";

XElement doc = XElement.Parse(xml);

var cars = new
{
    cars = (from c in doc.Descendants("car")
            select new { carid = c.Element("id").Value }
            ).ToList()
};

var json = JsonConvert.SerializeObject(cars);

Console.WriteLine("Json: {0}", json.ToString());

只需在您的控制台应用程序中复制粘贴,看看这是否是您要查找的内容。