簡體   English   中英

將位置坐標的Mongo BSON數組反序列化為自定義C#類

[英]Deserialize Mongo BSON array of location coordinates to custom C# class

我在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數組值反序列化為我創建的Coordinate類。

有任何想法嗎?

您需要創建一個自定義序列化器

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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM