【发布时间】:2015-10-15 13:36:36
【问题描述】:
我在 SinglePageApplication 中使用 DbGeography-Type(带有微风和角度)。现在当使用带有 DbGeography-Type(只读)的数据时没有问题。
一旦我保存具有 DbGeography-Type 属性的实体,我就会收到以下错误:
Error getting value from 'WellKnownValue' on 'System.Data.Entity.Spatial.DbGeography'
当数据被序列化为 JSON(使用 newtonsoft JSON.NET 还是 ODATA/WebAPI?)时,DbGeography 被正确序列化,但属性“WellKownValue”被称为“Geography”。这也反映在 MSDN 文档中:
[DataMemberAttribute(Name = "Geography")]
public DbGeographyWellKnownValue WellKnownValue { get; set; }
我的实体看起来像这样(通过网络):
{
..
"Name" : "Test",
"Coordinate" : {
"$id" : "3",
"$type" : "System.Data.Entity.Spatial.DbGeography, EntityFramework",
"Geography" : {
"$id" : "4",
"$type" : "System.Data.Entity.Spatial.DbGeographyWellKnownValue, EntityFramework",
"CoordinateSystemId" : 4326,
"WellKnownText" : "POINT (8.73275400148029 47.5006958431132)"
}
}
}
我猜当它稍后被反序列化时,JSON.NET 不知道我的对象的 Geography-Property 属性实际上称为 WellKnownValue。 p>
我使用的是 Newtonsoft.Json-Package 版本 7.0.1 和 Microsoft.Data.OData 版本 5.6.4。
如何解决这个问题?
【问题讨论】:
-
那么
DbGeographyWellKnownValue是什么?当目的是序列化为 json 时,在 EF 中实现它而不是普通的DbGeography重要吗? -
DbGeography有一个名为WellKnownValue的属性,其类型为DbGeographyWellKnownValue。一旦DbGeography被序列化为 JSON,该属性在生成的 JSON 字符串中不再称为WellKnownValue而是Geography(为什么我不知道)。但问题是:对于de序列化,必须能够使用默认构造函数(不带参数)实例化一个类。 DbGeography 类有这样一个构造函数,但没有设置一些重要的私有属性(请参阅我的答案),因此当您尝试读取属性WellKnownValue(getter)时,您会收到错误消息。
标签: .net json.net deserialization breeze sqlgeography