2014-07-16 15 views
1

我該如何反序列化這個JSON數據?鍵「100034」等本質上是動態的。如何使用動態(數字)鍵名反序列化子對象?

{ 
    "users" : { 
     "100034" : { 
      "name" : "tom", 
      "state" : "WA", 
      "id" : "cedf-c56f-18a4-4b1" 
     }, 
     "10045" : { 
      "name" : "steve", 
      "state" : "NY", 
      "id" : "ebb2-92bf-3062-7774" 
     }, 
     "12345" : { 
      "name" : "mike", 
      "state" : "MA", 
      "id" : "fb60-b34f-6dc8-aaf7" 
     } 
    } 
} 

有沒有一種方法可以直接訪問每個具有名稱,狀態和ID的對象?

+0

的可能重複的[反序列化JSON到C#動態對象?](http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) –

+0

它不重複的原因這裏..它的非法的c#標識符和動態也 – user2449952

回答

3

聲明你這樣的類:

class RootObject 
{ 
    public Dictionary<string, User> users { get; set; } 
} 

class User 
{ 
    public string name { get; set; } 
    public string state { get; set; } 
    public string id { get; set; } 
} 

反序列化這樣的:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json); 

演示:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string json = @" 
     { 
      ""users"": { 
       ""10045"": { 
        ""name"": ""steve"", 
        ""state"": ""NY"", 
        ""id"": ""ebb2-92bf-3062-7774"" 
       }, 
       ""12345"": { 
        ""name"": ""mike"", 
        ""state"": ""MA"", 
        ""id"": ""fb60-b34f-6dc8-aaf7"" 
       }, 
       ""100034"": { 
        ""name"": ""tom"", 
        ""state"": ""WA"", 
        ""id"": ""cedf-c56f-18a4-4b1"" 
       } 
      } 
     }"; 

     RootObject root = JsonConvert.DeserializeObject<RootObject>(json); 

     foreach (string key in root.users.Keys) 
     { 
      Console.WriteLine("key: " + key); 
      User user = root.users[key]; 
      Console.WriteLine("name: " + user.name); 
      Console.WriteLine("state: " + user.state); 
      Console.WriteLine("id: " + user.id); 
      Console.WriteLine(); 
     } 
    } 
} 

輸出:

key: 10045 
name: steve 
state: NY 
id: ebb2-92bf-3062-7774 

key: 12345 
name: mike 
state: MA 
id: fb60-b34f-6dc8-aaf7 

key: 100034 
name: tom 
state: WA 
id: cedf-c56f-18a4-4b1 
+0

正如我前面提到的鍵是動態的..你的解決方案如何在這種情況下工作?我怎麼知道要傳遞什麼作爲關鍵? – user2449952

+0

你試過了嗎?字典在反序列化過程中處理動態鍵。通過遍歷字典中的Keys集合來發現關鍵字是很簡單的。我已經爲我的答案添加了一個演示。 –

+0

非常感謝..其工作 – user2449952

-1
  1. 添加一個包System.Web.Script.Serialization;

  2. 假設你的JSON包含互聯網用戶的名單我創建一個類這樣的..

    public class internet 
    { 
        public List<User> Users { get; set; } 
    }; 
    public class User 
    { 
        public String Name { get; set; } 
        public String Id { get; set; } 
        public String State { get; set; } 
    }; 
    

假設你的JSON字符串是在變量「JSONDATA」遵循DE下面的代碼將您的JSON數據序列化爲Class對象。

 var JSONDATA = /* Your JSON String */; 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    internet Intr = serializer.Deserialize<internet>(JSONDATA); 
+1

這將不工作,因爲JSON不包含列表(數組)。 –

相關問題