2014-11-05 14 views
5

Cố gắng trả về một số dữ liệu GeoJSON khá đơn giản. Tôi thấy NetTopologySuite, và thiết lập một FeaturesCollection đơn giản và cố gắng để serialize nó ra thành một chuỗi GeoJSON chỉ để có được các lỗi sau:Gặp sự cố khi sắp xếp các tính năng NetTopologySuiteCollection sang GeoJSON

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

Nhìn qua các tiêu đề lớp, điểm sử dụng Phối hợp, mà không có một tài sản Phối hợp vì vậy tôi có thể thấy lý do tại sao sẽ có một tham chiếu vòng tròn. Vấn đề là, hầu hết (nếu không phải tất cả) các Geometries dường như sử dụng Point, vì vậy mà sẽ làm cho nó không thể bao giờ serialize bất cứ điều gì ... trừ khi tôi đang thiếu một cái gì đó.

Vì vậy, đây có phải là lỗi hoặc tôi thiếu gì đó không?

Tested chỉ với một điểm và có những lỗi tương tự, vì vậy đây là mã cho rằng:

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

gì được này 'Tạo()' phương pháp? Tôi không thấy nó [ở đây] (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON/GeoJsonSerializer.cs). – dbc

+0

Nếu bạn đang sử dụng hàm tạo đã sửa đổi cho 'GeoJsonSerializer', bạn cần đảm bảo [' CoordinateConverter'] (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON /Converters/CoordinateConverters.cs) được truyền cho nó, như được hiển thị [ở đây] (https://github.com/NetTopologySuite/NetTopologySuite/blob/d6b9737798d2ed4d85864f04b9689bc4ff193344/NetTopologySuite.IO/NetTopologySuite.IO.GeoJSON/GeoJsonSerializer.cs). – dbc

+1

Tạo() là một phần của lớp cha (rõ ràng.) Chuyển sang hàm khởi tạo mặc định hoạt động hoàn hảo. Cảm thấy tự do để làm cho rằng một câu trả lời thực tế và tôi sẽ đánh dấu nó. :) – CodeRedick

Trả lời

4

Sử dụng các constructor mặc định cho lớp GeoJsonSerializer:

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

Đó gắn một CoordinateConverter mà ngăn chặn vấn đề.

0

Thay vì trả lại Json sau khi bạn đã đăng đã có, bạn có thể sử dụng:

 return Content(sw.ToString, "application/Json"); 
Các vấn đề liên quan