我不确定它是否会有所帮助,但我在上面的评论中提到,我最终使用自定义模型联编程序来执行此操作。我挖出了什么,我相信是促使这个问题的原代码,而这也正是我结束了:
public async Task<ActionResult> Post(dynamic request)
{
return await ExecuteRequest(request, "application/json");
}
和一个自定义的模型绑定如下(它的工作原理上称为“后”或“公共行为“尽管你可以选择自己的约定 - 回退到默认的所有其他行动)
public class MyModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var actionName = controllerContext.RouteData.Values["Action"];
if (controllerContext.Controller.GetType() == typeof(MyController) && actionName != null &&
(string.Compare(actionName.ToString(), "post", StringComparison.OrdinalIgnoreCase) == 0 ||
string.Compare(actionName.ToString(), "public", StringComparison.OrdinalIgnoreCase) == 0))
{
string contentText;
using (var stream = controllerContext.HttpContext.Request.InputStream)
{
stream.Seek(0, SeekOrigin.Begin);
using (var reader = new StreamReader(stream))
contentText = reader.ReadToEnd();
}
if (string.IsNullOrEmpty(contentText)) return (null);
return JObject.Parse(contentText);
}
return base.BindModel(controllerContext, bindingContext);
}
}
然后注册自定义模型粘合剂的Application_Start的开头:
System.Web.Mvc.ModelBinders.Binders.DefaultBinder = new MyModelBinder();
护理讲解下投票,所以我可以改善这个问题? – mutex
检查一下,它可能会帮助你。 [反序列化JSON到C#动态对象?](http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) –
@ RezaShirazian:谢谢,我知道如何反序列化为动态对象,只是想知道是否有一种方法来自动执行它。我目前的做法是实现一个自定义模型绑定器来做到这一点,但正在寻找其他想法。 – mutex