2012-08-14 34 views
0

我正在使用ASP.NET MVC3和C#。我有這個類:如何建模綁定JSON到嵌套對象

public class JobTitle 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public MinimumRequirements MinimumRequirements; 


    public JobTitle(DataRow row) 
    { 
     ID = Utilities.SafeInt(row["JobTitle_ID"]); 
     Title = Utilities.SafeString(row["Job_Title"]); 

     MinimumRequirements = new MinimumRequirements() 
     { 
      Certifications = Utilities.SafeInt(row["....."]), 
      ID = Utilities.SafeInt(row["....."]), 
      Languages = Utilities.SafeString(row["....."]), 
      MinimumEducation = Utilities.SafeString(row["....."]), 
      MinimumGrade = Utilities.SafeString(row["....."]), 
      MinimumYOS = Utilities.SafeInt(row["....."]) 
     }; 
    } 
} 

而發送的JSON看起來是這樣的:

{ 
"ID": 401, 
"Title": "MinReq", 
"MinimumRequirements": { 
    "ID": 0, 
    "MinimumEducation": "Bachelors", 
    "MinimumGrade": "93", 
    "MinimumYOS": 10, 
    "Certifications": 1, 
    "Languages": "English" 
}} 

這裏是我的C#控制器方法的簽名: [HttpPut] 公衆的ActionResult JOBTITLE(JOBTITLE JOBTITLE,布爾doUpdate = true)

ID和標題屬性進來並填充數據,一切正常。但MinimumRequirements嵌套對象爲空。

我也試過這樣:

[HttpPut] 公衆的ActionResult JOBTITLE([綁定(PREFIX = 「MinimumRequirements」)JOBTITLE JOBTITLE,布爾doUpdate =真)

(即沒有任何工作)

下面是來自VS調試器的截圖,讓你知道如何結合外觀:

JSON binding to object

任何想法爲什麼嵌套對象不具有約束力?

回答

4

在你JobTitleMinimumRequirements類必須是一個property,而不是一個field

所以更換:

public MinimumRequirements MinimumRequirements; 

有:

public MinimumRequirements MinimumRequirements { get; set; } 

記住,默認模式粘結劑只對性能進行操作,而不是場。

從我可以看到你的 JobTitle模型沒有參數的構造函數,所以你不能用它作爲行動的說法,因爲默認的模型綁定將不知道如何進行實例化

也。因此,除了需要DataRow的構造函數之外,還要確保您有一個無參數的構造函數,否則如果您希望它顯示爲操作參數,則必須爲此類型編寫一個自定義模型聯編程序。

+0

噢,麻煩我!你是對的,那是固定的。我其實並不是故意要成爲一個領域,這只是一個粗心的錯誤。謝謝!!! – HerrimanCoder 2012-08-14 18:21:19

+0

只需在註釋中註明「您的JobTitle模型沒有無參數構造函數」....除了添加「get; set;」之外,我不必改變任何其他內容。使其成爲一個財產。它做了100%的工作。 – HerrimanCoder 2012-08-14 18:22:45

+0

糟糕,我實際上* DO *有一個無參數的構造函數,它可能是必需的。我只是沒有在文章中包含它。抱歉。謝謝。我受夠了。 – HerrimanCoder 2012-08-14 18:24:14