将位置坐标的Mongo BSON数组反序列化为自定义C#类
我有一份文件存储在Mongo中,格式如下:将位置坐标的Mongo BSON数组反序列化为自定义C#类,c#,mongodb,geolocation,bson,C#,Mongodb,Geolocation,Bson,我有一份文件存储在Mongo中,格式如下: "address" : { "building" : "469", "coord" : [ -73.961704, 40.662942 ], "street" : "Flatbush Avenue", "zipcode" : "11225" } 我使用官方的C#Mongo驱动程序与MongoDB实例通信。我已定义了以下POCO类,以与文档相对应: public class C
"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; }
}
但我不确定在序列化属性方面必须做些什么,以便将coord BSON数组值反序列化到我创建的坐标类中
有什么想法吗?您需要创建一个自定义:
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();
}
}
public class Address
{
//...
//Add this attribute
[BsonSerializer(typeof(MyCustomArraySerializer))]
public Coordinate Coord { get; set; }
}