asp.net-web-api – Asp.net web api中的DbGeometry序列化问题
我正在使用Entity Framework 6.0 Code First构建OData v3 Web API.
一切运作良好,我可以执行CRUD操作回到api服务器. 但是我使用的是空间类型,我的一些实体具有DbGeometry属性.当我尝试从客户端应用程序(仅用于测试的控制台应用程序)更新/发布具有DbGeometry类型的实体时,我得到此DataServiceRequestException:
我花了一段时间,但我确定DbGeometry类型是负责任的.我已经查看了this topic here并制作了一个自定义的JsonConverter,我应用于该属性: [Required] [JsonConverter(typeof(DbGeometryConverter))] [Column("geometria")] public DbGeometry Geometria { get; set; } 那没用.除非我删除DbGeometry属性,否则不会在web api服务器上反序列化该对象. 我还尝试更改全局json序列化程序行为 var formatters = GlobalConfiguration.Configuration.Formatters; var jsonFormatter = formatters.JsonFormatter; jsonFormatter.SerializerSettings.Converters.Add(new DbGeometryConverter()); 也是徒劳的.我真的需要DbGeometry属性.我还能做些什么来解决这个问题? 解决方法
有点晚了,但对于那些寻求答案的人:
我已经设法在控制器级别使用完全相同的代码.这个想法取自SO Question&Answer. 所以,这里的代码包括DbGeometryConverter. DbGeometryConverter.cs: public class DbGeometryConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType.IsAssignableFrom(typeof(DbGeometry)); } public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer) { var location = JObject.Load(reader); var token = location["Geometry"]["WellKnownText"]; string geom = token.ToString(); token = location["Geometry"]["CoordinateSystemId"]; int srid = token != null ? int.Parse(token.ToString()) : 0; var converted = DbGeometry.FromText(geom,srid); return converted; } public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer) { throw new NotImplementedException(); } public override bool CanWrite => false; } CustomJsonAttribute.cs: public class CustomJsonAttribute : Attribute,IControllerConfiguration { public void Initialize(HttpControllerSettings controllerSettings,HttpControllerDescriptor controllerDescriptor) { var formatter = controllerSettings.Formatters.JsonFormatter; formatter.SerializerSettings.Converters.Add(new DbGeometryConverter()); } } 和[CustomJson]属性在使用DbGeometry的控制器上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 是否可以使用ASP.NET ScriptManager来使用Windows FIPS安全
- asp.net – AppendHeader是否与AddHeader完全相同?
- asp.net – 在SQL SERVER 2005上启用CLR是否存在安全问题?
- asp.net – 如何提取与Outlook正在显示的employeeID属性值相
- asp.net – Windows Azure我可以在同一个额外的小实例或小实
- asp.net – 将web.web应用程序池添加到web.config会导致500
- asp.net – 将unicode数字从英语转换为devanagari
- asp.net-mvc – 在多个表单上指定验证摘要
- 使用asp.net图表控件的多列图表
- asp.net – 通过邮件发送wcf服务消费表单数据
- asp.net-mvc – 视图中的HttpContext.User或Page
- asp.net-mvc-4 – MVC4捆绑GZIP和头文件
- ASP.Net MVC如何将数据从视图传递到控制器
- asp.net-web-api2 – 什么导致swagger已经出现在
- asp.net-mvc – Azure ACS 2自定义域
- 巧用Mono.Cecil反射加载类型和方法信息
- asp.net-mvc-3 – Razor C# – 设置复选框值
- asp.net – 如何在MVC4 Web API中自定义JSON序列
- IIS ASP.NET WebApi在请求同一台服务器时死锁
- asp.net – “viewstate MAC的验证失败.如果这个