无法使用system.text.json序列化dot net 8中的空间点

问题描述 投票:0回答:1

我有一些代码来序列化空间点 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

我做错了什么?

c# entity-framework .net-core serialization spatial
1个回答
0
投票

我做错了什么?

看来您正在使用来自

MicrosoftSpatialGeoJsonConverter
Microsoft.Azure.Core.Spatial
,同时从
Point
序列化
NetTopologySuite
,要么将其从
Microsoft.Spatial
转换为相应的类型,要么尝试使用
NetTopologySuite.IO.GeoJSON4STJ中的JSON转换器

var options = new JsonSerializerOptions
{
    Converters =
    {
        new NetTopologySuite.IO.Converters.GeoJsonConverterFactory()
    },
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.