仅在一个对象时将XML转换为Json数组

我目前正在使用Newtonsoft将一些xml转换为json以从RestExtension返回。

我的xml是以。的forms

  name detail   name detail   

我把它转换为json使用

 JsonConvert.SerializeXmlNode(xmldocument); 

如果有多个项目,这可以正常工作。

我得到了这个 – json中的一个项目数组(这是我需要的):

 {"Items":{"Item":[{"Name":"name","Detail":"detail"},{"Name":"name","Detail":"detail"}]}} 

但是当只有一个时,可以理解的是这样转换(不是数组):

  {"Items":{"Item":{"Name":"name","Detail":"detail"}}} 

我正在阅读此内容的应用程序开发人员需要json返回一个项目数组,无论是否有一个或多个。

有没有办法欺骗它认为它是一个数组或者有人建议另一种方式这样做?

阅读有关Serialize Xml Node的文档

您可以通过这种方式强制使用JSON Array

 var xml = @"  name detail  "; 

DEMO

万一它可以帮助任何人,进一步meda的答复。 以下是使用XElement而不是xmlTextWriter和XDocument进行此操作的方法

 XNamespace ns = "http://james.newtonking.com/projects/json"; var items = new XElement("items",new XAttribute(XNamespace.Xmlns+"json",ns)); items.Add(new XElement("item",new XAttribute(ns+"Array",true), new XElement("name", "name"), new XElement("Detail", "detail"))); 

然后转换它

  XmlDocument doc = new XmlDocument(); doc.LoadXml(items.ToString()); var converted JsonConvert.SerializeXmlNode(doc); 

Cinchoo ETL – 一个开源库,可用于将此类xml转换为预期的json格式

 string xml = @"  name detail  "; StringBuilder sb = new StringBuilder(); using (var p = ChoXmlReader.LoadText(xml).WithXPath("/")) { using (var w = new ChoJSONWriter(sb) .Configure(c => c.SupportMultipleContent = true) ) w.Write(p); } Console.WriteLine(sb.ToString()); 

输出:

 { "Items": [ { "Name": "name", "Detail": "detail" } ] } 

免责声明:我是这个图书馆的作者。