![](/img/trans.png)
[英]How to convert key value from result to uppercase in an ASP.NET Core 3.1 Web API
[英]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.