2013-04-02 22 views
0

我有一個Json服務,我不能改變,因爲它不是我的。 他們的Json格式化的解析方式很困難。它看起來像這樣。Alter Json或ExtensionDataObject

"people": { 
    "Joe Bob": { 
       "name": "Joe Bob", 
       "id": "12345" 
    }, 
    "Bob Smith": { 
       "name": "Bob Smith", 
       "id": "54321" 
    } 
}, 

我真的更喜歡這個佈局像一個JSon數組,但它目前不是。 我想知道這裏最好的辦法。在解析它或加載ExtensionData並從中解析它之前,我應該將Json改爲看起來像一個數組嗎?

飼料中還有其他項目,我沒有問題。只是堅持這一節。

感謝

+0

mabye this:http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx可以幫助嗎?(如果你想循環的項目..) –

+0

你想用它做什麼?將它反序列化成一個類型?只需循環每個鍵?你碰到什麼確切的問題? –

+0

我想創建一個列表與包含名稱和ID的類。問題是他們命名的類,讓我絆倒。 – vSteve

回答

0

您可以使用json.net反序列化數據(你粘貼的JSON和做只有一個解析,無需修改任何東西)。

使用dynamic foo = JsonConvert.DeserializeObject<dynamic>(data) 比,你可以使用foo.people迭代列表,訪問名稱和值。

,你可以創建一個類(如果你知道的模式是什麼,以及將數據反序列化爲如給定類的列表:

public class People 
    { 
     [JsonProperty(PropertyName="people")] 
     public IDictionary<string, Person> Persons { get; set; } 
    } 

    public class Person 
    { 
     [JsonProperty(PropertyName="name")] 
     public string Name { get; set; } 

     [JsonProperty(PropertyName = "id")] 
     public string Id { get; set; } 
    } 

,比電話:

var obj = JsonConvert.DeserializeObject<People>(data); 
foreach (var item in obj.Persons.Values) 
{ 
     //item is instance of Person  
} 

另一個好的和可能的選擇將是: How can I navigate any JSON tree in c#?

+0

這可以使用json.net。它不符合標準的微軟產品。感謝您的幫助。 – vSteve