簡體   English   中英

如何在 .NET Core Web API 中的字典鍵中將枚舉轉換為 int

[英]How do I convert enum to int in Dictionary key in .NET Core Web API

假設我有一個enum

public enum Countries {
    France, GreatBritain, Japan, CostaRica, ...
}

假設我在 WebApi 控制器中有以下操作

[HttpGet]
public ActionResult<Dictionary<Countries, int> Get() {
   return new Dictionary<Countries, int> {
      [Countries.France] = 10,
      [Countries.CostaRica] = 50
      ...
   }
}

發送到客戶端的 JSON 是"France": 10, "CostaRica": 50等。

我更喜歡用 0:10 0: 10, 4: 50代替。 客戶不知道枚舉值; 只有整數索引和描述(如“法國”或“哥斯達黎加”)。 我正在使用相同的枚舉為數據庫播種 - 所以我相信 ID 匹配。

我嘗試了不同的JsonConverter選項,但它們似乎都假定標量值。

注意:這是一個簡化的例子; 真正的商業應用要復雜得多。 顯然,在服務器上使用 enum 有很大的好處,而無需在返回客戶端之前創建Dictionary<int, int>並轉換所有鍵。 我很確定 Json.NET 可以轉換它 - 我只是想知道如何幫助它。

我的應用程序是 .NET Core 2.2 這個例子也是如此。 我知道 3.0 對 Json.Net 的處理略有不同; 但我認為這個轉換問題與版本無關

這是轉換為 int 並返回ActionResult<Dictionary<int, int>> ,這將是這樣的:

[HttpGet]
public ActionResult<Dictionary<int, int>> Get() {
   return new Dictionary<Countries, int> {
      [Countries.France] = 10,
      [Countries.CostaRica] = 50
      ...
   }.ToDictionary(x => (int)x.Key, x => x.Value);
}

更新

只是想分享一下,如果您需要使用反射將任何Enum轉換為字典,您可以執行以下操作:

public Dictionary<string, object> GetEnumAsDictionary<TEnum>() where TEnum : System.Enum
{
    var result = new Dictionary<string, object>();

    var _fields = typeof(TEnum).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);

    for (int i = 0; i < _fields.Length; i++)
    {
        result.Add(_fields[i].Name, _fields[i].GetRawConstantValue());
    }

    return result;
}

用法 :

var enDic = GetEnumAsDictionary<Countries>();

GetRawConstantValue返回object ,這就是我將字典值類型作為對象的原因。 但是很容易將它綁定到其他數據類型或使其通用。

我認為這將是有用的分享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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