【问题标题】:Deserialize Mongo BSON array of location coordinates to custom C# class将位置坐标的 Mongo BSON 数组反序列化为自定义 C# 类
【发布时间】: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 类中。

有什么想法吗?

【问题讨论】:

    标签: c# mongodb geolocation bson


    【解决方案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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多