C# 无法将NetTopologySuite功能集合序列化为GeoJSON
尝试返回一些非常简单的GeoJSON数据。我找到了NetTopologySuite,并设置了一个简单的FeaturesCollection,并尝试将其序列化为GeoJson字符串,但只得到以下错误: 检测到属性“CoordinateValue”的自引用循环 键入“GeoAPI.Geometries.Coordinate”。路径 “要素[0]。几何体。坐标[0]” 通过查看类标题,Point使用了坐标,它有一个坐标属性,所以我可以看到为什么会有一个循环引用。问题是,大多数(如果不是全部的话)几何图形似乎都使用Point,因此不可能序列化任何东西。。。除非我遗漏了什么 这是一个bug还是我遗漏了什么 只测试了一个点,得到了相同的错误,下面是代码:C# 无法将NetTopologySuite功能集合序列化为GeoJSON,c#,.net,nettopologysuite,C#,.net,Nettopologysuite,尝试返回一些非常简单的GeoJSON数据。我找到了NetTopologySuite,并设置了一个简单的FeaturesCollection,并尝试将其序列化为GeoJson字符串,但只得到以下错误: 检测到属性“CoordinateValue”的自引用循环 键入“GeoAPI.Geometries.Coordinate”。路径 “要素[0]。几何体。坐标[0]” 通过查看类标题,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();
更新 已移动到,现在有自己的静态方法: 问题中的代码现在应该可以正常工作了
原始答案 使用类的默认构造函数: 它附加了一个防止问题发生的方法
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");