【发布时间】:2021-06-22 21:58:24
【问题描述】:
我正在按照 John Papa 在他最新的 PluralSight 课程中概述的方法使用 Angular、Breeze 和 Web API 2 构建一个 SPA。
一切正常,我可以将信息拉回、更新、插入、删除回服务器。但是,我使用的是空间类型,当我尝试使用空间类型更新实体时,出现以下错误
“Newtonsoft.Json.JsonSerializationException”类型的异常发生在 Newtonsoft.Json.dll 但未在用户代码中处理
附加信息:从“WellKnownValue”获取值时出错 'System.Data.Entity.Spatial.DbGeometry'。
内部异常似乎表明 WellKnownValue 为空,但事实并非如此,因为我检查了发送到服务器的 JSON,然后将其发送到 Breeze ContextProvider 并使用 SaveChanges 方法保存。
{
"entities": [
{
"TableKey": 2,
"CaseName": "Mikhail Lermontov",
"StartDate": "2013-06-11T00:00:00Z",
"EndDate": null,
"IsCurrent": true,
"SRID": 109,
"Shape": {
"$id": "2",
"$type": "System.Data.Entity.Spatial.DbGeometry, EntityFramework",
"Geometry": {
"$id": "3",
"$type": "System.Data.Entity.Spatial.DbGeometryWellKnownValue, EntityFramework",
"CoordinateSystemId": 2193,
"WellKnownText": "POLYGON ((1695943 5462665, 1713098 5462665, 1713098 5449659, 1695943 5449659, 1695943 5462665))"
}
},
"SpillLocation": "Marlborough Sounds",
"Image": "http://www.nzmaritime.co.nz/images/lm5.jpg\r\n",
"DefaultBaseMapKey": 2,
"__unmapped": {
"isPartial": false
},
"entityAspect": {
"entityTypeName": "DatSpillCase:#Osiris.Model",
"defaultResourceName": "DatSpillCases",
"entityState": "Modified",
"originalValuesMap": {
"CaseName": "Mikhail Lermontov"
},
"autoGeneratedKey": {
"propertyName": "TableKey",
"autoGeneratedKeyType": "Identity"
}
}
}
],
"saveOptions": {}
}
所以我的问题是,是否可以在 NewtonSoft 库中反序列化 DbGeometry 类型,如果没有,有什么建议可以解决这个问题。
【问题讨论】:
-
我用来序列化和反序列化地理类型变量的是 GeoJSON。在这个地址 github.com/jbattermann/GeoJSON.Net 已经有一个不完整的 .Net 库,尽管仍然缺少一些东西,但您始终可以从该项目中编写自己的序列化器/反序列化器