在控制器方法中将字符串绑定到类

时间:2015-01-24 02:56:12

标签: c# asp.net-mvc 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; }
}

其中PhoneNumber类能够绑定到JSON中的电话字符串。 这个想法是使用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类的字符串进行隐式操作覆盖,它可能会自动执行。不。

为此方案自定义模型绑定的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你希望当你的行动方法如

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。