2013-08-07 37 views
0
JsonConvert.SerializeXNode("<Root><Student key="Student1" value="4" /> <Student key="Student2" value="0" /></Root>") 

它返回轉換單一的XElement以JSON數組使用C#

{"Root":{Student:[{key:Student1,value=4}},Student:{key:Student2,value=0}]} 

,但我需要

JsonConvert.SerializeXNode("<Root><Student key="Student1" value="4" /></Root>") 

{"Root":[{Student:{key:Student1,value=4}}]} 

但它返回

{"Root":{Student:{key:Student1,value=4}}} 

任何一個可以幫助這個

+0

我想你的第一個回報是錯的。我得到'{「根」:{「學生」: {「@key」:「Student1」,「@ value」:「4」},{「@ key」:「Student2」,「@ value」:「0」}]}}', '。這甚至是合乎邏輯的,在JSON中,你不能有兩個具有相同名稱的'學生'屬性! – xanatos

+0

但它返回json values.where是有問題的意思。當單個元素的時候是反向對象,否則它是返回數組列表 – user2568074

回答

0

,如果有一個單一的Student元素你可能會發現,如果是這樣,刪除了所有屬性後添加一個。然後,你會序列化到JSON,爲了去除null條目執行一個簡單的String.Replace()

class Program 
{ 
    static void Main(string[] args) 
    { 
     var singleElement = false; 
     var x = XDocument 
      .Parse(@"<Root><Student key=""Student1"" value=""4""/></Root>"); 
     if (x.Root.Elements().Count() == 1) 
     { 
      singleElement = true; 
      var single = x.Root.Elements().First(); 
      x.Root.Elements().First().AddAfterSelf(single); 
      x.Root.Elements().Last().Attributes().ToList() 
       .ForEach(a => a.Remove()); 
      //optionally, remove the value, if you expect one 
      x.Root.Elements().Last().Value = String.Empty; 
     } 
     var xml = JsonConvert.SerializeXNode(x); 
     if (singleElement) 
      xml = xml.Replace(",null", ""); 
    } 
}