2014-10-28 16 views
9

Obecnie używam Newtonsoft do konwersji niektórych xml do json, aby powrócić z RestExtension.Konwersja XML do Json Array, gdy tylko jeden obiekt

Moje XML jest w formie

<Items> 
    <Item> 
    <Name>name</Name> 
    <Detail>detail</Detail>  
    </Item> 
    <Item> 
    <Name>name</Name> 
    <Detail>detail</Detail>  
    </Item> 
</Items> 

przekonwertować to do JSON przy użyciu

JsonConvert.SerializeXmlNode(xmldocument); 

Działa to dobrze, jeśli istnieje więcej niż jeden element.

uzyskać to - tablicę elementów w json (co jest to, czego potrzebuję):

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

Ale gdy istnieje tylko jeden to całkiem zrozumiałe konwertuje tak (nie tablica):

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

Deweloper aplikacji, który to czyta, potrzebuje jsona, aby zwrócił listę elementów niezależnie od tego, czy jest jeden, czy więcej.

Czy istnieje sposób na oszukanie go na myślenie, że jest to tablica lub czy ktoś może zaproponować inny sposób robienia tego?

+0

Niestety Co chcesz być tablicą nie wiem, ja poszedłem na pytanie poprawnie – ZoomVirus

+0

przykro mi Został zredagowany, aby miejmy nadzieję uczynić go jaśniejszym. Potrzebuję wielu przedmiotów. – Bex

+1

@DJkraze zrobił konwersję, której potrzebuje, potrzebuje jej innego formatu – ZoomVirus

Odpowiedz

9

Przeczytaj ten documentation about Serialize Xml Node

Można wymusić w ten sposób tablicę JSON

var xml = @"<Items xmlns:json='http://james.newtonking.com/projects/json' > 
      <Item json:Array='true'> 
       <Name>name</Name> 
       <Detail>detail</Detail>  
      </Item> 
      </Items>"; 

DEMO

+0

to świetnie! Czy zdajesz sobie sprawę z tego, jak wygenerowałbyś to za pomocą XElement, ponieważ nie odpowiada to ":"? – Bex

+0

':' jest słowem kluczowym sprawdź to https://dotnetfiddle.net/B8jQ9n – meda

+0

dzięki, rozumiem teraz. Postaw poniżej, jak to zrobić z XElement zamiast xmltextwritera i XDocument – Bex

2

W przypadku Pomaga każdemu, dalej do odpowiedzi na meda. Oto jak dokonać tej pracy z Xelement zamiast XmlTextWriter i 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"))); 

następnie przekształcić go

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