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)
更新资料
GeoJsonSerializer已移至NetTopologySuite.IO.GeoJSON并具有自己的静态Create()方法:
Run Code Online (Sandbox Code Playgroud)/// <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) { }
现在,问题中的代码应该可以按预期工作。
原始答案
对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)
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |