2

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

公共 System.Data.Spatial.DbGeometry CenterCoordinate { 获取;放; }

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

在客户端中,JSON 仅包含以下内容:

几何:对象 CoordinateSystemId:3498 WellKnownBinary:空 WellKnownText:“POINT (6438089.715 1801515.828)”

我真的不想解析 WellKnownText 来获得 X 和 Y 的值。

所以问题是如何控制 System.Data.Spatial 类型与 JSON 的序列化/反序列化,以便获得更有用的东西?JSON.net 格式化程序如何知道要包含/排除什么?

注意:我真的不想用属性装饰实体,因为每次我从数据库重新生成模型时这些都会丢失(我不知道为什么我们不能通过 VS2012 向模型字段添加属性并让它记住它们之后再生)。那么这可以是部分类还是覆盖格式化程序?

谢谢,马特

4

1 回答 1

1

不幸的是,如果您想使用 Javascript 操作坐标,您或多或少会在解析 WellKnownText 字段时遇到困难。

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

如果它让你感觉好些,那现在给我带来的麻烦也一样多。


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

GeoJSON 的结构更类似于 SpatialSQL:

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

于 2013-06-13T16:08:33.077 回答