asp.net-mvc – DataContractJsonSerializer ReadObject Excepti
发布时间:2020-12-16 09:14:42 所属栏目:asp.Net 来源:网络整理
导读:我遵循 ASP.NET MVC How to pass JSON object from View to Controller as Parameter的接受答案.就像原始问题一样,我有一个简单的POCO. 在DataContractJsonSerializer.ReadObject方法之前,Everthing对我来说很好.我收到以下异常: Expecting element ‘root
我遵循
ASP.NET MVC How to pass JSON object from View to Controller as Parameter的接受答案.就像原始问题一样,我有一个简单的POCO.
在DataContractJsonSerializer.ReadObject方法之前,Everthing对我来说很好.我收到以下异常:
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext) If filterContext.HttpContext.Request.ContentType.Contains("application/json") Then Dim s As System.IO.Stream = filterContext.HttpContext.Request.InputStream Dim o = New DataContractJsonSerializer(RootType).ReadObject(s) filterContext.ActionParameters(Param) = o Else Dim xmlRoot = XElement.Load(New StreamReader(filterContext.HttpContext.Request.InputStream,filterContext.HttpContext.Request.ContentEncoding)) Dim o As Object = New XmlSerializer(RootType).Deserialize(xmlRoot.CreateReader) filterContext.ActionParameters(Param) = o End If End Sub 有任何想法吗? 解决方法
您可能必须确保在poco上应用[DataContract]和[DataMember]属性.
作为一个单独的选项,您可能需要考虑我为mvc ControllerContext编写的这个扩展方法: using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; public static class MvcExtensions { public static T DeserializeJson<T>(this ControllerContext context) { var serializer = new JavaScriptSerializer(); var form = context.RequestContext.HttpContext.Request.Form.ToString(); return serializer.Deserialize<T>(HttpUtility.UrlDecode(form)); } } 它允许您使用JavaScriptSerializer轻松反序列化json,如下所示: var myInstance = controllerContext.DeserializeJson<MyClass>(); 或者,甚至更简单,您可以制作通用模型绑定器: public class JsonBinder<T> : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { return controllerContext.DeserializeJson<T>(); } } 然后通过将此属性应用于poco类来强烈键入您的mvc操作方法: [ModelBinder(typeof(JsonBinder<MyClass>))] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 为什么validateantiforgerytoken cookie值和
- asp.net – 在会话中存储相当大量的数据是否可以?
- iis-7 – ASP页面中的错误“80131509”
- 四种为HttpClient添加默认请求报头的解决方案
- asp.net – System.Web.Providers.DefaultMembershipProvid
- asp.net-mvc-3 – 更改ASP.NET MVC 3文件夹结构
- asp.net-mvc – 存储库与DAL中的服务模式:EF和Dapper
- asp.net – SharePoint文件大小限制
- oauth-2.0 – 连接Auth令牌并将其传递给启用了CORS的Signal
- asp.net – 多个RegisterClientScriptBlock
推荐文章
站长推荐
- asp.net-mvc-3 – WebGrid列中的MVC3 Html.Begin
- asp.net-mvc – 如何在Web表单和MVC2应用程序之间
- asp.net – 如何在不重新启动应用程序的情况下清
- asp.net-mvc – 使用ModelState.Remove处理Model
- 如何在ASP.NET MVC 4中选择自动完成文本字段值时
- .net core入门-跨域访问配置
- 在ASP.NET中下载文件的实现代码
- asp.net-web-api – 批量发布实体到WebAPI?
- asp.net-web-api – 使用WIF和OWIN中间件的角色与
- 什么时候不是在asp.net中使用runat =“server”?
热点阅读