2012-08-14 4 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 및 Title 등록 정보가 입력되어 데이터로 채워집니다. 그러나 MinimumRequirements 중첩 된 객체는 null로 제공됩니다.

나는 또한이 시도 :

[HttpPut] 공공 ActionResult JobTitle ([바인딩 (접두사 = "MinimumRequirements")] JobTitle jobTitle, 부울 doUpdate = TRUE) 중 하나가 작동하지 않았다

(

JSON binding to object

,536 : 어떻게 바인딩 모습을 알 수 있도록)

다음은 VS 디버거에서 스크린 샷입니다

중첩 된 객체가 바인딩되지 않는 이유는 무엇입니까?

답변

4

JobTitle 클래스에서 MinimumRequirementsfield이 아니고 property이어야합니다.

그래서 대체 :

public MinimumRequirements MinimumRequirements; 

로 :

public MinimumRequirements MinimumRequirements { get; set; } 

기본 모델 바인더가없는 필드에 전용 속성에 동작하는 것을 기억하십시오.

또한 JobTitle 모델에는 매개 변수없는 생성자가 없으므로 기본 모델 바인더가 인스턴스화 방법을 알지 못하므로 작업 인수로 사용할 수 없습니다. 따라서 DataRow을 사용하는 생성자 외에도 매개 변수없는 생성자가 있거나 작업 매개 변수로 나타나게하려면이 유형의 사용자 정의 모델 바인더를 작성해야합니다.

+0

오 STUPID me !! 당신 말이 맞아요. 나는 실제로 그 분야를 만들려고하지 않았다. 단지 부주의 한 실수였다. 감사!!! – HerrimanCoder

+0

"당신 JobTitle 모델에는 매개 변수없는 생성자가 없습니다."라는 주석에 대한 메모 만 있습니다. "get; set;"을 추가하는 것 외에 다른 것을 변경할 필요가 없었습니다. 그것을 재산으로 만들기 위해서. 그것은 단지 그것을 한 후에 100 % 일했습니다. – HerrimanCoder

+0

죄송합니다. 사실 매개 변수없는 생성자가 있습니다. 아마도 필요합니다. 나는 단지 그것을 포스트에 포함시키지 않았다. 죄송합니다. 감사. 끝났어. – HerrimanCoder

관련 문제