2015-10-28 17 views
1

我有一個JSON類結構像這樣來自第三方的API(只是問題的一部分顯示):JSON序列化可變數量的屬性

"template": { 
    "name": "MovieTemplate", 
    "ruleName": "Movie Template", 
    "zones": { 
     "Products": { 
      "type": "Record", 
      "name": "Products", 
      "content": "www.imagescloudsite.com/blahblah.gif" 
      "records": [ … ] 
     }, 
     "URL": { 
      "type":"DVD", 
      "name":"Bundle" 
      "content": "www.imagescloudsite.com/blahblah.gif" 
     } 
    } 
} 

的「區域」屬性可以包含很多屬性「產品 「,」URL「,」超人「,」笛卡爾「等...

但是,我不知道哪些和多少將在那裏,因爲這些是由我們的內容傢伙添加一個特殊控制面板。 Newtonsoft解串器抱怨,因爲我有一個這樣的模型,它顯然不會捕捉區域名稱,如「產品」和「URL」:

public class Zone 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
    public string Content { get; set; } 
} 

public class Template 
{ 
    public string Name { get; set; } 
    public string RuleName { get; set; } 
    public List<Zone> Zones { get; set; } 
} 

我如何能捕捉使用NewtonSoft區域名稱的任何想法? 謝謝。

回答

3

您開發區物業轉到一本字典,因爲你不知道前手鍵,但知道他們的內容結構。

像這樣

public class Template 
{ 
    public string Name { get; set; } 
    public string RuleName { get; set; } 
    public Dictionary<string,Zone> Zones { get; set; } 
} 
+0

工作,謝謝。 – FailedUnitTest

0

使用動態的將是一個不錯的選擇

dynamic d = Newtonsoft.Json.Linq.JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}"); 
1

,如果你有什麼改變模板類以下幾點:

public class Template 
{ 
    public string Name { get; set; } 
    public string RuleName { get; set; } 
    public Dictionary<string, Zone> Zones { get; set; } 
} 

你可以然後通過條目的鍵來訪問的名稱。