2014-09-19 67 views
4

反序列化JSON對象我有JSON這樣未知名

{ 
    "result": "success", 
    "response_code": 200, 
    "message": "", 
    "collection": { 
     "<channel_id>": { 
       "<category_id>": { 
        "id_category": "<category_id>", 
        "name": "<category>", 
        "date_created": "<date_tagged>" 
        }, 
       "<category_id>": { 
        "id_category": "<category_id>", 
        "name": "<category>", 
        "date_created": "<date_tagged>" 
        } 
       } 
      } 
} 

這CHANNEL_ID和CATEGORY_ID不是一個固定的名字。我如何可以在C#上反序列化它?

回答

3

假設一切是非常固定的,你可以嘗試沿着這些路線模型是:

​​

然後你反序列化如下(System.Web.Script.Serialization命名空間):

var result = new JavaScriptSerializer().Deserialize<MyJsonClass>(myJsonString); 

,你可以訪問特定字段,如下所示:

result.Collection[SOME_CHANNEL_ID][SOME_CATEGORY_ID].Name = "XXX"; 
+0

但是channel_id呢? channel_id不需要寫在課堂上嗎? – albilaga 2014-09-19 10:22:24

+0

如果我正確閱讀了要求,channel_id是一個佔位符,但可能是任何字符串。如果這是正確的(如果不是 - 完全忽略我的答案),用'SOME_CHANNEL_ID'替換一個實際的字符串(與'SOME_CATEGORY_ID'相同),這將起作用。 – decPL 2014-09-19 10:28:09

0

如果使用Dynamic inst ead是一個靜態類型,你可以有一個JSON文件的變量模式。這裏是一個工作控制檯程序:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var json = File.ReadAllText("file.json"); 

     dynamic obj = JObject.Parse(json); 

     Console.WriteLine(obj.collection.channel_id); 
    } 
}