【问题标题】:JsonConvert.SerializeXmlNode() adds extra child for arraysJsonConvert.SerializeXmlNode() 为数组添加额外的子元素
【发布时间】: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"
       }
   ]
}

【问题讨论】:

    标签: c# serialization


    【解决方案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());
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多