2014-10-28 65 views
3

我有這樣的XML這是偉大的:的XDocument或XmlDocument的,以JSON用C#

<Products> 
    <Product ProductCode="C1010" CategoryName="Coins" /> 
    <Product ProductCode="C1012" CategoryName="Coins" /> 
    <Product ProductCode="C1013" CategoryName="Coins" /> 
</Products> 

但它輸出到這個JSON:

{"Products":{"Product":[{"@ProductCode":"C1010","@CategoryName":"Coins"}, 
         {"@ProductCode":"C1012","@CategoryName":"Coins"},  
         {"@ProductCode":"C1013","@CategoryName":"Coins"}]}} 

我想在我的JSON無 '產品' 次級因爲所有三條線都是一個產品。這是我的C#代碼:

//x is an XDocument. 
JsonConvert.SerializeXNode(x, Formatting.None, false) 
//JsonConvert.SerializeXNode(x); //I also tried without the formatting and the boolean. 

當我 '轉換' 一個XDocument到的XmlDocument和使用:

var xmlDocument = new System.Xml.XmlDocument(); 
using (var xmlReader = x.CreateReader()) 
{ 
    xmlDocument.Load(xmlReader); 
} 
JsonConvert.SerializeXmNode(xmlDocument); 

它給了我完全一樣的輸出。那麼如何修改我的JSON解析,以便我有一個簡單的產品列表。我更喜歡最乾淨的解決方案。

要或許有點更清晰,我會像這樣的輸出:

[{"@ProductCode":"C1010","@CategoryName":"Coins"}, 
{"@ProductCode":"C1012","@CategoryName":"Coins"},  
{"@ProductCode":"C1013","@CategoryName":"Coins"}] 
+0

正如你可能知道,那'JSON'輸出表示'XML'輸入。要改變它,你「打破」了它。 – flindeberg 2014-10-28 11:08:33

+1

你試過調用'JsonConvert.SerializeXNode(x,Formatting.None,true)'嗎?應該省略根節點。 – Jehof 2014-10-28 11:16:14

+0

哈哈,翻轉布爾正是我所需要的!謝謝@Jehof – 2014-10-28 11:23:09

回答

5

使用方法調用

JsonConvert.SerializeXNode(x, Formatting.None, true); 

這將省去根節點,並應創建你所期望的。

0

Instread使用XML作家或CON版從原來的XML剛看了一個新的文件使用的文件的寫文件流作家。

基本上你會:

List xml_retrevedData = new List(); 
FileStramWriter fr = new FileStramWriter(); 
fr.Write("{"Products":[{"@ProductCode":" //colection item 
variable1.data1","@CategoryName":"//colection item 
variable1.data2"}, {"@ProductCode":"//colection item 
variable2.data1","@CategoryName":"//colection item 
variable11.data1"}, 
{"@ProductCode":"//colection item variable13.data1","@CategoryName":"//colection item variable13.data3"}]}"); 
// in side the file stream Writer 
+0

呃我想要一個json文件,我不明白你打算如何將xml轉換成json,你能詳細說明一下嗎? – 2014-10-28 10:20:46

+0

通過LinQ解析xml文件,並將它放到一個集合中,或者你可以直接用jason文件格式寫入。最好的辦法是通過隔離的文件流在隔離存儲中創建一個文件並命名文件filename.jason ..然後你可以在文件中寫入文件write ..但是不要忘記將其定製爲jason格式.. – 2014-10-28 10:58:17

+0

基本上你會是「{」Products「:[{」@ ProductCode「:」// colection item variable 1.data1「,」@ CategoryName「:」// colection item variable 1.data2「}, {」 @ProductCode「:」// colection item variable 2.data1「,」@ CategoryName「:」// colection item variable11.data1「}, {」@ProductCode「:」// colection item variable13.data1「,」@ CategoryName「:」// colection item variable13.data3「}]}」在文件流Writer中 – 2014-10-28 11:01:58

0

試試這個

public string getData(ref XmlDocument doc) { 

     JObject productobj = new JObject(); 

     var productsenum = from p in doc.GetElementsByTagName("product").Cast<XmlElement>() 
          select p; 

     JArray products = new JArray(); 
     foreach (XmlElement p in productsenum) { 
      JObject pobj = new JObject(); 
      pobj["ProductCode"] = p.GetAttribute("ProductCode"); 
      pobj["CategoryName"]= p.GetAttribute("CategoryName"); 

      products.Add(pobj); 
     } 

     JObject product = new JObject(); 
     product["Product"] = products; 

     productobj["Products"] = product; 

     return productobj.ToString(); 
    }