将位置坐标的 Mongo BSON 数组反序列化为自定义 C# 类
Posted
技术标签:
【中文标题】将位置坐标的 Mongo BSON 数组反序列化为自定义 C# 类【英文标题】:Deserialize Mongo BSON array of location coordinates to custom C# class 【发布时间】:2016-02-11 08:16:05 【问题描述】:我有一个存储在 Mongo 中的文档,格式如下:
"address" :
"building" : "469",
"coord" : [
-73.961704,
40.662942
],
"street" : "Flatbush Avenue",
"zipcode" : "11225"
我正在使用官方的 C# Mongo 驱动程序与 MongoDB 实例进行通信。我已经定义了以下 POCO 类来对应文档:
public class Coordinate
public float Lat get; set;
public float Long get; set;
public class Address
[BsonElement("street")]
public string Street get; set;
[BsonElement("zipcode")]
public string ZipCode get; set;
[BsonElement("building")]
public string Building get; set;
[BsonElement("coord")]
public Coordinate Coord get; set;
但我不确定在序列化属性方面必须做什么,以便将坐标 BSON 数组值反序列化到我创建的 Coordinate 类中。
有什么想法吗?
【问题讨论】:
【参考方案1】:您需要创建一个自定义serializer:
public class MyCustomArraySerializer : SerializerBase<Coordinate>
public override Coordinate Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
context.Reader.ReadStartArray();
var lat=context.Reader.ReadDouble();
var lon = context.Reader.ReadDouble();
context.Reader.ReadEndArray();
return new Coordinate() Long = (float)lon, Lat = (float)lat ;
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Coordinate value)
context.Writer.WriteStartArray();
context.Writer.WriteDouble(value.Lat);
context.Writer.WriteDouble(value.Long);
context.Writer.WriteEndArray();
然后在Coord
属性上添加这个属性:
public class Address
//...
//Add this attribute
[BsonSerializer(typeof(MyCustomArraySerializer))]
public Coordinate Coord get; set;
【讨论】:
以上是关于将位置坐标的 Mongo BSON 数组反序列化为自定义 C# 类的主要内容,如果未能解决你的问题,请参考以下文章