更新 : 2019-06-08 前端
build in convertor web
https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions#built-in-converterssql
注意 : value null 是不走 convertor 的哦, 因此咱們也不須要顧慮 nullable 的狀況.typescript
更新 2019-06-01 數據庫
string jsonWithConverter = JsonConvert.SerializeObject(new Dada { name = "keatkeat", type = Type.Completed }, new StringEnumConverter());
寫 c# 咱們喜歡用 enum. 可是 enum to sql, enum to fronend 都是麻煩. json
由於 enum 通常會轉換成 int 而不是 string. 但是這樣就不可讀了. c#
因此呢,咱們的要動點手腳 api
ef core convert asp.net
modelBuilder.Entity<Order>().Property(p => p.status).IsRequired().HasMaxLength(128).HasConversion( v => v.ToString(), v => (OrderStatus)Enum.Parse(typeof(OrderStatus), v) );
有了這個在數據庫就能夠看見 string 了.ui
而後是 web api
services.AddMvc(options => { options.EnableEndpointRouting = false; }) .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); })
這樣 GET 就能夠輸出 string 了, POST 的時候 binding, asp.net core 會自動轉換, 因此前端傳 string or int 均可以.
OData
很是聰明,啥也不用弄,它原本就輸出 string ... 也有點恐怖啦..
typescript
enum StringStatus { pending = 'pending', completed = 'completed' } enum NumberStatus { pending, completed = 13 } console.log(StringStatus.pending); // 'pending' console.log(NumberStatus.pending); // 0 console.log(NumberStatus.completed); // 13