2014-11-05 11 views
5

Der Versuch, einige ziemlich einfache GeoJSON-Daten zurückzugeben. Ich fand NetTopologySuite, und eine einfache FeaturesCollection eingerichtet und versucht, es nur zu einem GeoJSON Zeichenfolge serialisiert aus den folgenden Fehler zu erhalten:Probleme beim Serialisieren von NetTopologySuite FeaturesCollection zu GeoJSON

"Self referencing loop detected for property 'CoordinateValue' with type 'GeoAPI.Geometries.Coordinate'. Path 'Features[0].Geometry.Coordinates[0]'."

Blick durch die Klasse-Header verwendet Punkt, Koordinaten, die eine Koordinaten Eigenschaft hat also kann ich sehen, warum es einen Zirkelbezug geben würde. Die Sache ist, dass die meisten (wenn nicht alle) Geometrien Point zu verwenden scheinen, so dass es unmöglich wäre, jemals etwas zu serialisieren ... es sei denn, ich verpasse etwas.

Also ist das ein Fehler oder fehlt mir etwas?

mit nur einem Punkt getestet und erhielt die gleiche Störung, also hier ist der Code dafür:

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(); 
+0

Was ist das 'Create()' Methode? Ich sehe es [hier] nicht (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON/GeoJsonSerializer.cs). – dbc

+0

Wenn Sie einen modifizierten Konstruktor für 'GeoJsonSerializer' verwenden, müssen Sie einen [' CoordinateConverter'] (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON /Converters/CoordinateConverters.cs) wird an ihn übergeben, wie es [hier] (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON/GeoJsonSerializer.cs) gezeigt wird. – dbc

+1

Create() ist Teil der Elternklasse (anscheinend.) Der Wechsel zum Standardkonstruktor funktioniert einwandfrei. Fühlen Sie sich frei, das eine tatsächliche Antwort zu machen, und ich werde es markieren. :) – CodeRedick

Antwort

4

Verwenden Sie den Standard-Konstruktor für die GeoJsonSerializer Klasse:

var jsonSerializer = new NetTopologySuite.IO.GeoJsonSerializer(); 

, dass ein CoordinateConverter legt die verhindert das Problem.

0

Statt Json zurückzukehren, nachdem Sie bereits serialisiert haben, können Sie verwenden:

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