如何解决如何处理像字符串和整数这样的枚举
我正在重写一个 api,从 newtonsoft.json 切换到 system.text.json,我遇到的一个问题是,在某些情况下,我们将枚举作为整数发送,有时作为字符串发送。
考虑这个例子:
{
"result":
{
"RequestTypeEnum":"Request.Get"
},"resultTypeEnum": 0
}
如何在 system.text.json 中实现? 我知道对于 pascal/camel 情况可以使用 Json 命名属性,但我不知道如何在同一响应中以不同方式处理枚举
解决方法
这可能不是完整的答案。
-
整数到枚举的转换会自动发生。
-
要将字符串转换为 Enum,您必须编写自己的转换器。
以下是我尝试过的示例。
class Program
{
static async Task Main(string[] args)
{
string data = @"{
""result"":
{
""RequestTypeEnum"":""Option""
},""resultTypeEnum"": 2
}";
TempJson jsonObj = System.Text.Json.JsonSerializer.Deserialize<TempJson>(data);
Console.WriteLine();
Console.ReadLine();
}
public class TempJson
{
[System.Text.Json.Serialization.JsonPropertyName("result")]
public ChildObj Result { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("resultTypeEnum")]
public ResultEnumType ResultTypeEnum { get; set; }
}
public class ChildObj
{
[System.Text.Json.Serialization.JsonConverter(typeof(CategoryJsonConverter))]
public ResultEnumType RequestTypeEnum { get; set; }
}
public class CategoryJsonConverter : JsonConverter<ResultEnumType>
{
public override ResultEnumType Read(ref Utf8JsonReader reader,Type typeToConvert,JsonSerializerOptions options)
{
var name = reader.GetString();
return (ResultEnumType)Enum.Parse(typeToConvert,name);
}
public override void Write(Utf8JsonWriter writer,ResultEnumType value,JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
public enum ResultEnumType
{
Get,Post,Put,Delete,Option
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。