[英]how to handle enums like strings and ints
我正在重寫 api,從 newtonsoft.json 切換到 system.text.json,我遇到的一個問題是,在某些情況下,我們將枚舉發送為字符串,有時我們將枚舉發送為字符串。
考慮這個例子:
{
"result":
{
"RequestTypeEnum":"Request.Get"
},
"resultTypeEnum": 0
}
如何在 system.text.json 中實現這一點? 我知道對於帕斯卡/駱駝案例 Json 命名屬性可以使用,但我不知道如何在同一響應中以不同方式處理枚舉
這可能不是完整的答案。
Integer 到 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.