C# 无法将NetTopologySuite功能集合序列化为GeoJSON

C# 无法将NetTopologySuite功能集合序列化为GeoJSON,c#,.net,nettopologysuite,C#,.net,Nettopologysuite,尝试返回一些非常简单的GeoJSON数据。我找到了NetTopologySuite,并设置了一个简单的FeaturesCollection,并尝试将其序列化为GeoJson字符串,但只得到以下错误: 检测到属性“CoordinateValue”的自引用循环 键入“GeoAPI.Geometries.Coordinate”。路径 “要素[0]。几何体。坐标[0]” 通过查看类标题,Point使用了坐标,它有一个坐标属性,所以我可以看到为什么会有一个循环引用。问题是,大多数(如果不是全部的话)几何图

尝试返回一些非常简单的GeoJSON数据。我找到了NetTopologySuite,并设置了一个简单的FeaturesCollection,并尝试将其序列化为GeoJson字符串,但只得到以下错误:

检测到属性“CoordinateValue”的自引用循环 键入“GeoAPI.Geometries.Coordinate”。路径 “要素[0]。几何体。坐标[0]”

通过查看类标题,Point使用了坐标,它有一个坐标属性,所以我可以看到为什么会有一个循环引用。问题是,大多数(如果不是全部的话)几何图形似乎都使用Point,因此不可能序列化任何东西。。。除非我遗漏了什么

这是一个bug还是我遗漏了什么

只测试了一个点,得到了相同的错误,下面是代码:

using NTS = NetTopologySuite;

var ret = new NTS.Geometries.Point(42.9074, -78.7911);

var jsonSerializer = NTS.IO.GeoJsonSerializer.Create();

var sw = new System.IO.StringWriter();
jsonSerializer.Serialize(sw, ret);

var json = sw.ToString();

更新

已移动到,现在有自己的静态方法:

问题中的代码现在应该可以正常工作了


原始答案

使用类的默认构造函数:

它附加了一个防止问题发生的方法

GeoJsonSerializer
实际上没有一个静态的
Create()
方法,因此您只能使用基类的方法。事实上,以下情况会导致编译器错误:

GeoJsonSerializer jsonSerializer = NTS.IO.GeoJsonSerializer.Create();

您可以使用以下命令,而不是在序列化后返回Json:

        return Content(sw.ToString, "application/Json");

派对有点晚了,但以下是我的看法: 您可以轻松地使
与当前的Json序列化程序设置兼容

[DataContract]
公共类地理定位:NetTopologySuite.Geometrics.Point
{
const int GoogleMapsSRID=4326;
公共地理定位(双纬度、双经度)
:基准(x:经度,y:纬度)=>
base.SRID=谷歌地图ssrid;
[数据成员]
公共双经度=>base.X;
[数据成员]
公共双纬度=>base.Y;
}
DataContract
DataMember
是这里的关键:

新地理位置(42.9074,-78.7911).ToJson()=>{“经度”:42.9074,“纬度”:-78.7911}

这是什么
Create()
方法?我看不到。如果您正在为
GeoJsonSerializer
使用一个修改过的构造函数,您需要确保向它传递一个,如图所示。Create()显然是父类的一部分。切换到默认构造函数可以很好地工作。请随便回答,我会记下来的。:)
var jsonSerializer = new NetTopologySuite.IO.GeoJsonSerializer();
GeoJsonSerializer jsonSerializer = NTS.IO.GeoJsonSerializer.Create();
        return Content(sw.ToString, "application/Json");