如果我理解发布的JSon数据绑定到asp.net mvc 3中的动作参数,我没什么特别的。
例如:
[HttpPost]
public JsonResult Synchro(TestJSON data)
{
... data member should contain the JSon data sent...
return Json("ok" );
}
TestJSON类:
public class TestJSON
{
public string chaine;
public int nombre;
}
和JSon数据:
{chaine:"Test",nombre:"23"}
(与curl.exe一起发送以进行测试)
但是Syncho函数中的数据成员总是为null或0。
我搜索了很多,我无法理解。
我发现了一些奇怪的东西。如果我删除了JsonValueProviderFactory(在Application_Start中):
var v = ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().First();
ValueProviderFactories.Factories.Remove(v);
如果我创建自己的模型绑定器(在赌注的某个地方找到):
public class JeanJsonModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
{
// not JSON request
return null;
}
var request = controllerContext.HttpContext.Request;
var incomingData = new StreamReader(request.InputStream).ReadToEnd();
if (String.IsNullOrEmpty(incomingData))
{
// no JSON data
return null;
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize(incomingData, bindingContext.ModelType);
}
}
如果我手动绑定我的参数:
[HttpPost]
public JsonResult Synchro([ModelBinder(typeof(JeanJsonModelBinder))] TestJSON data)
{
... data member should contains JSon data sent...
return Json("ok" );
}
有效!
有什么想法吗?
由于
答案 0 :(得分:2)
尝试使用模型类的属性而不是数据库。 我认为如果你用你的默认模型绑定器替换它可能会起作用,但你仍然应该使用propertys,因为这是标准的mo。