2017-02-17 25 views
1

我需要將以下XML轉換爲下面顯示的JSON。我正在使用Newtonsoft.Json,無法找到配置和json:Array屬性的正確組合,以獲得我需要的內容。我還有其他屬性嗎?我需要寫一個自定義轉換器嗎?使用Newtonsoft.Json將XML轉換爲JSON數組

這裏是我的XML:

<Container> 
    <Encounters> 
    <Encounter> 
     <a>a1</a> 
     <b>b1</b> 
    </Encounter> 
    <Encounter> 
     <a>a2</a> 
     <b>b2</b> 
    </Encounter> 
    </Encounters> 
</Container> 

這是我需要的JSON:

{ 
    "Container": { 
    "Encounters" : [ 
     { 
     "a": "a1", 
     "b": "b1" 
     }, 
     { 
     "a": "a2", 
     "b": "b2" 
     } 
    ] 
    } 
} 

這是我目前得到JSON:

{ 
    "Container": { 
    "Encounters" : { 
     "Encounter" : [ 
     { 
      "a": "a1", 
      "b": "b1" 
     }, 
     { 
      "a": "a2", 
      "b": "b2" 
     } 
     ] 
    } 
    } 
} 
+0

只需使用'JSON:數組= 'true'到要轉換爲Array的XML標記。 –

+0

如果我將json:Array ='true'添加到Encounters中,我會得到「Encounter」:[「Encounter」:[etc ...這不是我想要的。 – user481779

+0

將'json:Array ='true''添加到容器標籤 –

回答

2

json:Array='true'不在這種情況下會給你想要的結果。此屬性旨在表示您希望某個特定的XML元素在只有其中一個XML元素轉換爲JSON時被視爲一個數組。如果有多個特定的XML元素,它們將被自動視爲一個數組。因此,在您的情況下,多個Encounter元素將成爲單個Encounters對象內的陣列。看起來你實際上希望將其降低一級。 Json.Net沒有辦法在XML中使用屬性。因此,有三種可能的方法,我可以看到解決這個問題:它轉換成JSON

  • 操縱JSON之前

    1. 操作XML從XML
    2. 轉換之後編寫自定義XML到JSON轉換器做你想做的事。

    我認爲方法2時可能使用的LINQ-to-JSON API(JObjects)最簡單的:

    string xml = 
    @"<Container> 
        <Encounters> 
        <Encounter> 
         <a>a1</a> 
         <b>b1</b> 
        </Encounter> 
        <Encounter> 
         <a>a2</a> 
         <b>b2</b> 
        </Encounter> 
        </Encounters> 
    </Container>"; 
    
    // Convert XML to a JObject 
    JObject root = JObject.Parse(JsonConvert.SerializeXNode(XElement.Parse(xml))); 
    
    // Move the array of Encounter objects up one level 
    JProperty encounters = ((JObject)root["Container"]).Property("Encounters"); 
    encounters.Value = encounters.Value["Encounter"]; 
    
    // Output the JSON 
    string json = root.ToString(); 
    Console.WriteLine(json); 
    

    輸出:

    { 
        "Container": { 
        "Encounters": [ 
         { 
         "a": "a1", 
         "b": "b1" 
         }, 
         { 
         "a": "a2", 
         "b": "b2" 
         } 
        ] 
        } 
    } 
    

    小提琴:https://dotnetfiddle.net/kk1Exr

  • +0

    謝謝,對不起,驗收。 – user481779

    +0

    不用擔心。很高興我能夠提供幫助。 –