无法将NetTopologySuite FeaturesCollection序列化为GeoJSON

Cod*_*ick 7 .net c# nettopologysuite

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

"使用类型'GeoAPI.Geometries.Coordinate'检测属性'CoordinateValue'的自引用循环.路径'特征[0] .Geometry.Coordinates [0]'."

查看类标题,Point使用Coordinate,它具有Coordinate属性,因此我可以看到为什么会有循环引用.问题是,大多数(如果不是全部)几何图形似乎都使用了Point,这样就不可能对任何东西进行序列化......除非我遗漏了一些东西.

这是一个错误还是我错过了什么?

仅使用Point进行测试并得到相同的错误,所以这里是代码:

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();
Run Code Online (Sandbox Code Playgroud)

dbc*_*dbc 5

更新资料

GeoJsonSerializer已移至NetTopologySuite.IO.GeoJSON并具有自己的静态Create()方法:

/// <summary>
/// Factory method to create a (Geo)JsonSerializer
/// </summary>
/// <remarks>Calls <see cref="GeoJsonSerializer.CreateDefault()"/> internally</remarks>
/// <returns>A <see cref="JsonSerializer"/></returns>
public new static JsonSerializer Create()
{
    return CreateDefault();
}
Run Code Online (Sandbox Code Playgroud)

在使用直接构造已被弃用:

[Obsolete("Use GeoJsonSerializer.Create...() functions")]
public GeoJsonSerializer() : this(Wgs84Factory) { }
Run Code Online (Sandbox Code Playgroud)

现在,问题中的代码应该可以按预期工作。


原始答案

GeoJsonSerializer类使用默认构造函数:

var jsonSerializer = new NetTopologySuite.IO.GeoJsonSerializer();
Run Code Online (Sandbox Code Playgroud)

这样CoordinateConverter可以防止出现问题。

GeoJsonSerializer实际上没有静态Create()方法,因此您可以依靠基类的JsonSerializer.Create()。实际上,以下内容将导致编译器错误:

GeoJsonSerializer jsonSerializer = NTS.IO.GeoJsonSerializer.Create();
Run Code Online (Sandbox Code Playgroud)