Converti XML in Json Array quando un solo object

Attualmente sto usando Newtonsoft per convertire alcuni xml in json per tornare da RestExtension.

Il mio xml è sotto forma di

  name detail   name detail   

Lo converto in json usando

 JsonConvert.SerializeXmlNode(xmldocument); 

Funziona bene se c’è più di un object.

Ho capito: una serie di elementi in json (che è ciò di cui ho bisogno):

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

Ma quando ce n’è solo uno converte in modo comprensibile come questo (non un array):

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

Il mio sviluppatore di app che sta leggendo questo ha bisogno di JSON per restituire una serie di elementi a prescindere o se ce ne sono uno o più.

C’è un modo per indurlo a pensare che sia un array o qualcuno può suggerire un altro modo per farlo?

Leggi questa documentazione su Serialize Xml Node

Puoi forzare JSON Array in questo modo

 var xml = @"  name detail  "; 

DEMO

Nel caso in cui aiuti qualcuno, oltre alla risposta di Meda. Ecco come si fa a lavorare con XElement piuttosto che con xmlTextWriter e 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"))); 

quindi per convertirlo

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

Cinchoo ETL : una libreria open source disponibile per convertire tale xml nel formato previsto di 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()); 

Produzione:

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

Disclaimer: sono l’autore di questa libreria.