在控制器方法中将字符串绑定到 class
Bind string to class in controller method
我想像这样绑定 JSON 的提交
{
"id": 1,
"name": "bob",
"phone": "(425) 882-8080"
}
到...
class Model
{
public int Id { get; set; }
public string Name { get; set; }
public PhoneNumber Phone { get; set; }
}
其中电话号码 class 能够绑定到 JSON 中的 phone 字符串。
这个想法是使用 json.net 自定义转换器,例如:
class Model
{
public int Id { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(PhoneNumberCoverter))]
public PhoneNumber Phone { get; set; }
}
问题是 MVC 甚至没有尝试使用 ReadJson
方法。 Model.Phone == null.
我已经尝试了一些东西。希望如果我对 PhoneNumber class 的字符串进行隐式操作覆盖,它可能会自动执行。没有。
针对此场景自定义模型绑定的正确方法是什么?
我想你希望当你的操作方法像
public ActionResult Post(Model myModel)
{
// you expect that myModel should has used JSonConverter and provide you data.
}
以上内容不会像您预期的那样工作,并且此 JsonConvertor 属性的原因是特定的 Json.net 而不是 MVC 属性,因此 DefaultModelBinder 不会考虑该属性来绑定您的数据。
可能正确且简单的方法(但不是强类型)
public ActionResult Post(string jsonData)
{
// Now here use Json.net JsonConvert to deserialize string to object of Type Model.
}
另一种解决方案是构建您自己的自定义模型绑定器并在其中使用 Json.net。
我想像这样绑定 JSON 的提交
{
"id": 1,
"name": "bob",
"phone": "(425) 882-8080"
}
到...
class Model
{
public int Id { get; set; }
public string Name { get; set; }
public PhoneNumber Phone { get; set; }
}
其中电话号码 class 能够绑定到 JSON 中的 phone 字符串。 这个想法是使用 json.net 自定义转换器,例如:
class Model
{
public int Id { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(PhoneNumberCoverter))]
public PhoneNumber Phone { get; set; }
}
问题是 MVC 甚至没有尝试使用 ReadJson
方法。 Model.Phone == null.
我已经尝试了一些东西。希望如果我对 PhoneNumber class 的字符串进行隐式操作覆盖,它可能会自动执行。没有。
针对此场景自定义模型绑定的正确方法是什么?
我想你希望当你的操作方法像
public ActionResult Post(Model myModel)
{
// you expect that myModel should has used JSonConverter and provide you data.
}
以上内容不会像您预期的那样工作,并且此 JsonConvertor 属性的原因是特定的 Json.net 而不是 MVC 属性,因此 DefaultModelBinder 不会考虑该属性来绑定您的数据。
可能正确且简单的方法(但不是强类型)
public ActionResult Post(string jsonData)
{
// Now here use Json.net JsonConvert to deserialize string to object of Type Model.
}
另一种解决方案是构建您自己的自定义模型绑定器并在其中使用 Json.net。