c# - JsonConverter 不会用破折号(连字符)转换枚举
问题描述
我正在尝试使用 .NET Core (5) System.Text.Json JsonSerializer.Deserialize() 将 JSON 对象转换为 C# 类,但它抛出了 JsonException。我相信原因是因为它试图转换为枚举的字符串值包含破折号(连字符)。枚举如下所示:
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum TypeEnum
{
[EnumMember(Value = "loopback")]
Loopback = 1,
[EnumMember(Value = "link-local")]
LinkLocal = 2,
}
JSON 对象非常大,但导致异常的部分是:
{
"address": "fe80::3617:ebff:fec0:b54c/64"
"family": "inet6",
"type": "link-local"
}
当 JsonSerializer 遇到 "type":"link-local" 时,它不喜欢 "link-local" 并抛出。有没有什么办法解决这一问题?
谢谢。
被要求例外所以这里是:
System.Text.Json.JsonException : The JSON value could not be converted to DmIfInfoAddr+TypeEnum. Path: $[0].addrs[0].type | LineNumber: 0 | BytePositionInLine: 144.
Stack Trace:
ThrowHelper.ThrowJsonException(String message)
EnumConverter`1.ReadWithQuotes(Utf8JsonReader& reader)
EnumConverter`1.Read(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options)
JsonPropertyInfo`1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader)
ObjectDefaultConverter`1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
IEnumerableDefaultConverter`2.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, TCollection& value)
JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
JsonPropertyInfo`1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader)
ObjectDefaultConverter`1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
IEnumerableDefaultConverter`2.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, TCollection& value)
JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, Type returnType, JsonSerializerOptions options)
JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)
JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
解决方案
到目前为止,正如您在从guide迁移中看到的那样,不System.Text.Json
支持属性。github上有一个问题,您可以跟踪。作为解决方法,您可以尝试使用from 。System.Runtime.Serialization
Newtonsoft.Json
JsonStringEnumMemberConverter
Macross.Json.Extensions
推荐阅读
- c - C中的二叉搜索树导致堆损坏错误
- ios - CALayer的Presentation(Presentation Layer)和render(in:context)
- arm - 配置 GDB 以接受交叉编译的可执行文件?
- javascript - 如何使用Angular中的过滤器访问嵌套的对象数组?
- java - Eclipse Content Assist 忽略下划线
- reactjs - 如何使调度同步
- numpy - 在numpy中将协方差表转换为协方差矩阵的最简单方法
- java - Jenkins 使用 Java 构建注入环境变量
- html - 将图像放在 SVG 中,移除 SVG
- javascript - 美国的日期排序在使用时刻函数的 javascript 中不起作用