【发布时间】:2011-03-15 15:46:09
【问题描述】:
考虑这个类:
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; }
}
}
我在集合集上有一个地理空间索引,例如{ Geo: "2d" }。不幸的是,驱动程序尝试将纬度/经度坐标存储为字符串,而不是数字,我收到一条错误消息,提示 Tue Mar 15 16:29:22 [conn8] insert database.locations exception 13026 geo values must be numbers: { 纬度:“50.0853779”,长:“19.931276700000012”} 1 毫秒。为了缓解这个问题,我设置了这样的地图:
BsonClassMap.RegisterClassMap<Location.Coordinates>(cm =>
{
cm.AutoMap();
cm.MapProperty(c => c.Lat).SetRepresentation(BsonType.Double);
cm.MapProperty(c => c.Long).SetRepresentation(BsonType.Double);
});
请注意,没有BsonType.Decimal 或类似的东西。实际上,当尝试调用Save() 时,我得到了MongoDB.Bson.TruncationException,这似乎是合乎逻辑的。我有哪些选择?
【问题讨论】:
标签: c# serialization mongodb mongodb-.net-driver