如何使用10gen C#官方驱动程序设置地理值的序列化选项?

Paw*_*iak 4 c# serialization mongodb mongodb-.net-driver

考虑此类:

public class Location
{
    public Coordinates Geo { get; set; }

    public Location()
    {
        Geo = new Coordinates();
    }

    public class Coordinates
    {
        public decimal Lat { get; set; }
        public decimal Long { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的收藏集上有一个地理空间索引,例如{ Geo: "2d" }。不幸的是,驱动程序尝试将纬度/经度坐标存储为字符串而不是数字,并且我收到一条错误消息,提示星期二3月15日16:29:22 [conn8] insert database.locations异常13026地理值必须为数字:{纬度: “ 50.0853779”,长:“ 19.931276700000012”} 1ms。为了减轻这个问题,我设置了这样的地图:

BsonClassMap.RegisterClassMap<Location.Coordinates>(cm =>
{
    cm.AutoMap();
    cm.MapProperty(c => c.Lat).SetRepresentation(BsonType.Double);
    cm.MapProperty(c => c.Long).SetRepresentation(BsonType.Double);
});
Run Code Online (Sandbox Code Playgroud)

请注意,没有BsonType.Decimal也没有类似的东西。结果,当尝试调用时,Save()我得到了一个MongoDB.Bson.TruncationException,这似乎是合乎逻辑的。我有什么选择?

And*_*ich 5

根据此错误(UTC2011年1月21日上午05:46:23修复),在c#官方驱动程序中添加了功能'AllowTruncation'。因此,您需要下载最新的驱动程序版本并享受!同样,可以使用BsonRepresentationAttribute代替SetRepresentation,如下所示:

public class C {
  [BsonRepresentation(BsonType.Double, AllowTruncation=true)]
  public decimal D;
}
Run Code Online (Sandbox Code Playgroud)