簡體   English   中英

如何處理字符串和整數等枚舉

[英]how to handle enums like strings and ints

我正在重寫 api,從 newtonsoft.json 切換到 system.text.json,我遇到的一個問題是,在某些情況下,我們將枚舉發送為字符串,有時我們將枚舉發送為字符串。

考慮這個例子:

{
"result":
{
"RequestTypeEnum":"Request.Get"
},
"resultTypeEnum": 0
}

如何在 system.text.json 中實現這一點? 我知道對於帕斯卡/駱駝案例 Json 命名屬性可以使用,但我不知道如何在同一響應中以不同方式處理枚舉

這可能不是完整的答案。

  1. Integer 到 Enum 的轉換會自動發生。

  2. 對於字符串到枚舉,您必須編寫自己的轉換器。

以下是我嘗試過的示例。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM