JsonConverter 不会用破折号(连字符)转换枚举
JsonConverter will not convert enum with dashes(hyphens)
我正在尝试使用 .NET Core (5) System.Text.Json JsonSerializer.Deserialize() 将 JSON 对象转换为 C# class,但它抛出了 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)
截至目前,System.Text.Json
不支持 System.Runtime.Serialization
属性,您可以在从 Newtonsoft.Json
guide. There is an issue on github which you can track. As workaround you can try to use JsonStringEnumMemberConverter
from Macross.Json.Extensions
.
的迁移中看到
我正在尝试使用 .NET Core (5) System.Text.Json JsonSerializer.Deserialize() 将 JSON 对象转换为 C# class,但它抛出了 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)
截至目前,System.Text.Json
不支持 System.Runtime.Serialization
属性,您可以在从 Newtonsoft.Json
guide. There is an issue on github which you can track. As workaround you can try to use JsonStringEnumMemberConverter
from Macross.Json.Extensions
.