考虑以下模型,该模型使用XmlSerializer和JSON.net将对象序列化为相应的格式。
[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; }
}
现在考虑以下 ASP.NET MVC 3 操作,它接受 JSON 或 XML 请求并以各自的格式返回模型(基于接受标头)。
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();
}
}
}
JSON 和 XML 输入存在自定义ValueProviderFactory实现。就IsReallyImportant
目前而言,当输入映射到 MyModel 时将被忽略。但是,如果我定义IsReallyImportant
使用“isreallyimportant”的属性,那么信息就会被正确序列化。
[JsonProperty("isreallyimportant")]
[XmlElement("isreallyimportant")]
public string IsReallyImportant { get; set; }
正如预期的那样,默认绑定器在将传入值映射到模型时使用属性名称。我查看了BindAttribute,但是属性不支持它。
如何告诉 ASP.NET MVC 3 该属性IsReallyImportant
应该在传入请求中绑定到“重要”?
我有太多模型无法为每个模型编写自定义活页夹。请注意,我不使用 ASP.NET Web API。