Swagger一直loading打不开
其它异常如下
异常1
Unhandled exception. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'X called on empty Point')
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.JsonConverter`1.WriteCore(Utf8JsonWriter writer, T& value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteCore[TValue](Utf8JsonWriter writer, TValue& value, JsonTypeInfo`1 jsonTypeInfo)
at System.Text.Json.JsonSerializer.WriteString[TValue](TValue& value, JsonTypeInfo`1 jsonTypeInfo)
at System.Text.Json.JsonSerializer.Serialize[TValue](TValue value, JsonSerializerOptions options)
at Program.Main() in C:\local\code\AllTogetherNow\Daily\Daily.cs:line 66
异常2
Unhandled exception. System.ArgumentException: .NET number values such as positive and negative infinity cannot be written as valid JSON. To make it work when using 'JsonSerializer', consider specifying 'JsonNumberHandling.AllowNamedFloatingPointLiterals' (see https://docs.microsoft.com/dotnet/api/system.text.j
son.serialization.jsonnumberhandling).
at System.Text.Json.ThrowHelper.ThrowArgumentException_ValueNotSupported()
at System.Text.Json.Utf8JsonWriter.WriteNumberValue(Double value)
at System.Text.Json.Serialization.Converters.DoubleConverter.Write(Utf8JsonWriter writer, Double value, JsonSerializerOptions options)
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.JsonConverter`1.WriteCoreAsObject(Utf8JsonWriter writer, Object value, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteCore[TValue](Utf8JsonWriter writer, TValue& value, JsonTypeInfo`1 jsonTypeInfo)
at System.Text.Json.JsonSerializer.Serialize[TValue](Utf8JsonWriter writer, TValue value, JsonSerializerOptions options)
at System.Text.Json.Nodes.JsonValueNotTrimmable`1.WriteTo(Utf8JsonWriter writer, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonValueConverter.Write(Utf8JsonWriter writer, JsonValue value, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonNodeConverter.Write(Utf8JsonWriter writer, JsonNode value, JsonSerializerOptions options)
at System.Text.Json.Nodes.JsonObject.WriteTo(Utf8JsonWriter writer, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonObjectConverter.Write(Utf8JsonWriter writer, JsonObject value, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonNodeConverter.Write(Utf8JsonWriter writer, JsonNode value, JsonSerializerOptions options)
at System.Text.Json.Nodes.JsonArray.WriteTo(Utf8JsonWriter writer, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonArrayConverter.Write(Utf8JsonWriter writer, JsonArray value, JsonSerializerOptions options)
at System.Text.Json.Serialization.Converters.JsonNodeConverter.Write(Utf8JsonWriter writer, JsonNode value, JsonSerializerOptions options)
at System.Text.Json.Nodes.JsonObject.WriteTo(Utf8JsonWriter writer, JsonSerializerOptions options)
at System.Text.Json.Nodes.JsonNode.ToJsonString(JsonSerializerOptions options)
异常3
未处理的异常。System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 (参数‘在空点上调用的 X’)
在 NetTopologySuite.Geometries.Point.get_X()
在 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)
在 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)
在 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) 在
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)
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)
在 System.Text.Json.JsonSerializer.WriteCore[TValue](Utf8JsonWriter writer, TValue& value, JsonTypeInfo 1 jsonTypeInfo) at System.Text.Json.JsonSerializer.WriteString[TValue](TValue& value, JsonTypeInfo
1 jsonTypeInfo)
在 System.Text.Json.JsonSerializer.Serialize[TValue](TValue value, JsonSerializerOptions options)
本文未出现上面的异常,只是Swagger一直LOADING,加载不出来,调试内存一直上升。
PostgreSQL数据库表字段类型设置如下
实体配置如下
两种解决方法
方法1:基于 SqlSugar 的 ORM 将Geometry转换为其它实体方式
PointZ实体代码如下:
public class PointZ
{
/// <summary>
/// 经度
/// </summary>
public double X { get; set; }
/// <summary>
/// 纬度
/// </summary>
public double Y { get; set; }
/// <summary>
/// 海拔
/// </summary>
public double Z { get; set; }
public PointZ(double x = 0, double y = 0, double z = 0)
{
X = x;
Y = y;
Z = z;
}
public override string ToString()
{
return $"POINT ({X} {Y} {Z})";
}
}
将PointZ转换为Geometry代码如下:
public SugarParameter ParameterConverter<T>(object value, int i)
{
var name = "@PointZ" + i;
var location = value as PointZ;
var wkt = location != null ? $"POINT Z({location.X} {location.Y} {location.Z})" : null;
// 设置Value为SqlGeometry类型
Geometry geometry = null;
if (location != null)
{
WKTReader reader = new WKTReader();
// 创建一个Geometry对象(这里使用WKT表示的点)
geometry = reader.Read(wkt);
geometry.SRID = 4326;
bool bIsValid = geometry.IsValid; // Valid确保几何体是有效的
}
var parameter = new SugarParameter(name, geometry)
{
UdtTypeName = "geometry",
CustomDbType = NpgsqlDbType.Geometry,
};
return parameter;
}
public T QueryConverter<T>(IDataRecord dr, int i)
{
var str = dr.GetValue(i).ToString();
if (string.IsNullOrWhiteSpace(str))
{
return default;
}
var parts = str.Replace("POINT Z(", "").Replace("POINT Z (", "").Replace("(", "").Replace(")", "").Split(' ');
if (parts.Length == 3 &&
double.TryParse(parts[0], out var x) &&
double.TryParse(parts[1], out var y) &&
double.TryParse(parts[2], out var z))
{
var location = new PointZ(x, y, z);
return (T)(object)location;
}
return default;
}
本文使用此方法解决上面提到的Swagger打不开的问题。
方法2:配置JsonSerializerOptions.Converters
var settings = new JsonSerializerOptions()
{
NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals,
ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.Preserve,
MaxDepth = 100,
};
settings.Converters.Add(new NetTopologySuite.IO.Converters.GeoJsonConverterFactory());
添加 GeoJsonConverterFactory 是关键。它位于 NetTopologySuite.IO.GeoJSON4STJ 包中,适用于使用 System.Text.Json 序列化器。
添加NetTopologySuite.IO.GeoJSON4STJ包后,在Startup.cs中添加代码如下:
再运行即可解决上面的异常消息。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。