XmlSerializer 및 JSON.net을 사용하여 각 형식으로 개체를 직렬화하는 다음 모델을 고려하십시오.ASP.NET MVC 3을 사용하여 필드의 값을 다른 이름의 속성에 바인딩하는 방법은 무엇입니까?
[XmlRoot("my_model")]
[JsonObject("my_model")]
public class MyModel {
[JsonProperty("property1")]
[XmlElement("property1")]
public string Property1 { get; set; }
[JsonProperty("important")]
[XmlElement("important")]
public string IsReallyImportant { get; set; }
}
지금 (수락 헤더에 따라) 각각의 형식으로 JSON 또는 XML 요청 및 반환 모델을 받아 다음과 같은 ASP.NET MVC 3 조치를 고려한다.
public class MyController {
public ActionResult Post(MyModel model) {
// process model
string acceptType = Request.AcceptTypes[0];
int index = acceptType.IndexOf(';');
if (index > 0)
{
acceptType = item.Substring(0, index);
}
switch(acceptType) {
case "application/xml":
case "text/xml":
return new XmlResult(model);
case "application/json":
return new JsonNetResult(model);
default:
return View();
}
}
}
사용자 정의 ValueProviderFactory 구현은 JSON 및 XML 입력을 위해 존재한다. 그대로 입력이 MyModel에 매핑 될 때 IsReallyImportant
이 무시됩니다. 그러나 IsReallyImportant
의 특성을 "isreallyimportant"를 사용하도록 정의하면 정보가 올바르게 serialize됩니다.
[JsonProperty("isreallyimportant")]
[XmlElement("isreallyimportant")]
public string IsReallyImportant { get; set; }
예상대로 기본 바인더는 들어오는 값을 모델에 매핑 할 때 속성 이름을 사용합니다. 나는 BindAttribute을 보았지만 속성에는 지원되지 않습니다.
들어오는 요청에서 IsReallyImportant
속성이 "중요"로 바인딩되어야한다고 ASP.NET MVC 3에 알리는 방법은 무엇입니까?
각 모델에 맞춤식 바인더를 쓸 수있는 모델이 너무 많습니다. ASP.NET 웹 API는 사용하지 않습니다.
트릭을 해 주셔서 감사합니다. – bloudraak