将位置坐标的Mongo BSON数组反序列化为自定义C#类

将位置坐标的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

我有一份文件存储在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; }
}
但我不确定在序列化属性方面必须做些什么,以便将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; }
}