2014-10-28 136 views
9

我目前使用Newtonsoft將一些xml轉換爲json以從RestExtension返回。當只有一個對象時,將XML轉換爲Json數組

我的XML是在

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

形式轉換我用這個

JsonConvert.SerializeXmlNode(xmldocument); 

這工作得很好,如果有一個以上的項目JSON。

我得到這樣的 - 項的JSON數組(這是我所需要的):

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

但是,當只有一個是很可以理解的轉換是這樣的(不是數組):

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

正在閱讀本文的我的應用程序開發人員需要使用json來返回項目數組,無論是否存在一個或多個項目。

有沒有一種方法來欺騙它認爲它是一個數組或可以有人建議另一種方式做到這一點?

+0

對不起你想成爲一個數組不知道我跟着這個問題妥善 – ZoomVirus 2014-10-28 15:57:41

+0

對不起什麼我已編輯,希望更清楚。我需要一系列物品。 – Bex 2014-10-28 15:59:07

+1

@DJkraze他已經完成了他只需要的轉換,它需要它不同的格式 – ZoomVirus 2014-10-28 16:01:58

回答

9

閱讀本documentation about Serialize Xml Node

您可以強制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

太棒了!你會碰巧知道如何用XElement生成它,因爲它不喜歡「:」? – Bex 2014-10-28 16:27:52

+0

':'是一個關鍵字檢查這個https://dotnetfiddle.net/B8jQ9n – meda 2014-10-28 17:04:00

+0

謝謝我明白now.have把下面的帖子如何使用XElement而不是xmltextwritera和XDocument – Bex 2014-10-29 09:29:51

2

在情況下,它可以幫助任何人,進一步梅達的答覆。 這裏是你如何讓與的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);