JsonConvert.SerializeXmlNode() 为数组添加额外的子元素

Posted

技术标签:

【中文标题】JsonConvert.SerializeXmlNode() 为数组添加额外的子元素【英文标题】:JsonConvert.SerializeXmlNode() adds extra child for arrays 【发布时间】:2022-01-16 21:46:33 【问题描述】:

我正在使用 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"
       
   ]

【问题讨论】:

【参考方案1】:

我相信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());

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

【讨论】:

以上是关于JsonConvert.SerializeXmlNode() 为数组添加额外的子元素的主要内容,如果未能解决你的问题,请参考以下文章