我有一些代码来序列化空间点 CurrentHabitat.SiteLocation (在服务器端 Blazor 8 应用程序中)。这失败了。对象 CurrentHabitat 是作为来自 MSSQL 数据库的逆向工程 EF 模型的一部分生成的,并且字段 SiteLocation 在数据库中的初始状态为 (geography,null)。
var options = new JsonSerializerOptions
{
Converters =
{
new MicrosoftSpatialGeoJsonConverter()
},
NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals,
ReferenceHandler = ReferenceHandler.Preserve,
MaxDepth=100
};
string thisLatLong = JsonSerializer.Serialize(CurrentHabitat.SiteLocation,options);
CurrentHabitat.SiteLocation 的值显示为
{POINT (-3.89695 55.99762)}
Area: 0
Boundary: {GEOMETRYCOLLECTION EMPTY}
BoundaryDimension: False
Centroid: {POINT (-3.89695 55.99762)}
Coordinate: {(-3.89695, 55.99762)}
CoordinateSequence: {((-3.89695, 55.99762))}
Coordinates: {NetTopologySuite.Geometries.Coordinate[1]}
Dimension: P
Envelope: {POINT (-3.89695 55.99762)}
EnvelopeInternal: {Env[-3.89695 : -3.89695, 55.99762 : 55.99762]}
Factory: {GeometryFactory[PM=Floating, SRID=4326, CSFactory=CoordinateArraySequenceFactory, GeometryOverlay:Legacy]}
GeometryType: "Point"
InteriorPoint: {POINT (-3.89695 55.99762)}
IsEmpty: false
IsGeometryCollection: false
IsRectangle: false
IsSimple: true
IsValid: true
Length: 0
M: NaN
NumGeometries: 1
NumPoints: 1
OgcGeometryType: Point
PointOnSurface: {POINT (-3.89695 55.99762)}
PrecisionModel: {Floating}
SRID: 4326
SortIndex: Point
UserData: null
X: -3.89695
Y: 55.99762
Z: NaN
序列化失败: {“指定的参数超出了有效值的范围。(参数'X在空点上调用')”}
相关的堆栈跟踪显示:
at NetTopologySuite.Geometries.Point.get_X()
at System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1.GetMemberAndWriteJson(Object obj, WriteStack& state, Utf8JsonWriter writer)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.JsonConverter`1.TryWrite(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1.GetMemberAndWriteJson(Object obj, WriteStack& state, Utf8JsonWriter writer)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.JsonConverter`1.TryWrite(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1.GetMemberAndWriteJson(Object obj, WriteStack& state, Utf8JsonWriter writer)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.JsonConverter`1.TryWrite(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1.GetMemberAndWriteJson(Object obj, WriteStack& state, Utf8JsonWriter writer)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.JsonConverter`1.TryWrite(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.JsonConverter`1.WriteCore(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1.Serialize(Utf8JsonWriter writer, T& rootValue, Object rootValueBoxed)
at System.Text.Json.JsonSerializer.WriteString[TValue](TValue& value, JsonTypeInfo`1 jsonTypeInfo)
at System.Text.Json.JsonSerializer.Serialize[TValue](TValue value, JsonSerializerOptions options)
at HabitatHub3.Pages.ShowPond.<onSaveClick>d__42.MoveNext() in C:\Users\Blahblah\source\repos\HabitatHub3\HabitatHub3\Pages\ShowPond.razor:line 371
我做错了什么?
我做错了什么?
看来您正在使用来自
MicrosoftSpatialGeoJsonConverter
的
Microsoft.Azure.Core.Spatial
,同时从Point
序列化
NetTopologySuite
,要么将其从Microsoft.Spatial
转换为相应的类型,要么尝试使用NetTopologySuite.IO.GeoJSON4STJ
中的JSON转换器
:
var options = new JsonSerializerOptions
{
Converters =
{
new NetTopologySuite.IO.Converters.GeoJsonConverterFactory()
},
...
}