如何控制JSON.. NET序列化System.Data.Spatial.DbGeometry



我有一个DB First实体框架5数据访问层,它映射到一个包含SQL几何类型字段CenterCoordinate的表。生成的实体包含以下内容:

public System.Data.Spatial.DbGeometry CenterCoordinate {get;设置;}

我的客户端javascript请求API,只接受JSON。然后,我使用Asp.net Web API使用默认格式化程序(JSON.NET)来提供此服务。在API控制器中,字段有一个长长的属性列表,包括XCoordinate和YCoordinate。

客户端JSON只包含以下内容:

几何:对象CoordinateSystemId: 3498WellKnownBinary:零WellKnownText: "POINT (6438089.715 1801515.828)"

我真的不想解析WellKnownText来得到X和y的值

所以问题是我如何控制序列化/反序列化的System.Data.Spatial类型到/从JSON这样我得到一些更有用的东西?JSON.net格式化程序如何知道包含/排除什么?

注意:我真的不想用属性来装饰实体,因为每次我从数据库中重新生成模型时,这些属性都会丢失(我不知道为什么我们不能通过VS2012向模型字段添加属性,并在再生后让它记住它们)。那么,这可以与部分类或重写格式化器一起使用吗?

谢谢,马特

不幸的是,如果您想用Javascript操作坐标,那么您或多或少会遇到解析WellKnownText字段的问题。

Geometry是通过WKT字段保存到数据库的SQLSpatial类型,因此DbGeometry类型将JSON转换为该格式。

如果这能让你感觉好点的话,我现在也在给你找麻烦。


编辑:这些资源可能会有所帮助:

GeoJSON的结构更类似于SpatialSQL:

  • http://www.geojson.org/geojson-spec.html
  • https://github.com/Esri/geojson-utils/blob/master/src/jsonConverters.js

这是一个用于将DbGeo类型序列化/反序列化为JSON的解决方案:

  • http://www.arcgis.com/home/item.html?id=6d28a606369c43fd9a6f929541ae7c93

相关内容

  • 没有找到相关文章