MongoDb和网络拓扑套件

MongoDb和网络拓扑套件,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,如何使用mongo db保存具有几何特性(如NTS)的实体 using GeoAPI.Geometries; using NetTopologySuite.Geometries; public class Area { public string Id { get; set; } public Polygon Extent { get; set; } } 当我试图保存对象时,我得到 “超过最大序列化深度(正在序列化的对象是否具有循环引用?)” 异常(NTS的对象中确实有循环引

如何使用mongo db保存具有几何特性(如NTS)的实体

using GeoAPI.Geometries;
using NetTopologySuite.Geometries;

public class Area
{
    public string Id { get; set; }
    public Polygon Extent { get; set; }
}
当我试图保存对象时,我得到

“超过最大序列化深度(正在序列化的对象是否具有循环引用?)”

异常(NTS的对象中确实有循环引用)。有办法绕过它吗?

是的,你可以。此类序列化程序也包含在C#驱动程序代码本身中,例如(.NET区域性信息具有循环引用,而且您只希望存储实际的区域设置代码,而不是所有派生信息)


CultureInfoSerializer
的源代码非常简单。

我使用NTS。它不支持它。但是如果我创建自定义序列化程序,我将无法使用空间索引。好吧,自定义序列化程序应该以与mongo期望的空间索引约定兼容的格式存储数据。对于坐标,这可能不仅需要简单的格式转换,还需要坐标转换。您是否愿意在序列化程序中这样做是有争议的,因为非倾斜不变转换将产生奇怪的查询行为,但是,如果您需要MongoDB不支持的查询行为,那么无论如何您都会遇到麻烦。