【发布时间】:2020-07-27 13:33:24
【问题描述】:
我有以下课程。我正在尝试将 Json 反序列化为这些 LookUpData 对象的数组:
[DataContract]
public class LookUpData
{
[DataMember]
public string Id { get; set; }
[DataMember]
public GeographyPoint Location { get; set; }
}
}
Json 数据如下所示:
{
"Id": "123",
"Location": {
"Latitude": 1,
"Longitude": -1,
}
}
},
我想创建一个自定义的 Json 反序列化器,以便在读取 Json 并点击“位置”时,它将根据纬度和经度值创建一个新的 GeographyPoint 类型。
我已经在 Custom Json Serializer 上查看了 Newtonsoft 的文档以及有关 Stack Overflow 的有用答案,例如 Custom Deserialization using Json.NET,但我找不到如何实际创建的示例> 反序列化时的新类型。例如,我目前使用标准反序列化器收到的错误是“无法创建 Microsoft.Spatial.GeographyPoint 类型的实例。类型是接口或抽象类,不能实例化”。
如果有人能在这里指出正确的方向,我将不胜感激。谢谢!
【问题讨论】:
-
我不明白你的问题。反序列化时,它总是为所有内容创建一个“新”实例。
-
JsonConvert.DeserializeObject<List<LookUpData>>(jsonString)有什么问题? -
我已经更新了我的问题@rory.ap 并提供了更多解释 - 抱歉,这不清楚。我需要创建一个从经度和纬度值创建的新“类型”(GeographyPoint')。目前使用标准反序列化器时,我收到错误消息:'无法创建 Microsoft.Spatial.GeographyPoint 类型的实例。类型是接口或抽象类,不能实例化”。
-
使用
Latitude和Longitude道具创建自己的MyGeographyPoint类...在您的类中创建这种类型的私有字段并让默认反序列化反序列化到它...然后添加getter第一次使用GeographyPoint.Create和来自MyGeographyPoint的数据创建真正的GeographyPoint并返回它(类似于链接中的LB 答案) -
是否需要序列化以及反序列化?