背景介紹
在webapi中增加數據的時候會傳遞一個實體,實體中可能存在枚舉類型的數據,如果傳遞下標值不容易方便擴展,因爲下標都是順序標定的,比如:
public enum Gender
{
man, //--0
woman // --1
}
但是在實際需求過程中可能會在man 或者woman中間加入一個新的枚舉值。這個時候前臺傳遞下標不變的情況下就會產生錯誤。如果讓前端改動也不是一個很好的方案,這個時候需要在接口傳遞參數過程中添加處理。
解決方案
展示的時候需要將枚舉類型展示成爲定義的樣式,解決方案爲在枚舉類型定義上邊添加特性[Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))]就可以了。 添加上述特性之後後臺向前臺展示問題解決了,但是新問題就是前端向後臺傳遞數據的時候如果是按照字符串傳遞枚舉類型會報錯。在.netcore startup添加中間件就可以處理 services.AddControllers().AddNewtonsoftJson(); 經過這兩個步驟就可以將枚舉數據類型的問題解決了。東西不多,但是在探索過程中經歷了各種挫折,現在有時間趕緊記錄下來方便以後查閱。
步驟記錄
1、如果不作處理,後端傳遞給前段的數據爲:
2、想要的結果爲:
在這裏需要在定義枚舉的變量上添加特性
展示正確,然後前臺需要傳遞給後臺
然後就出現了錯誤:
這個問題的原因是因爲在startup中沒有添加相關的中間件,需要在startup中的AddController後鏈式添加json處理
所有的依賴項添加完成之後如下圖
正確顯示結果:
代碼如下
[Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))]
public enum Gender
{
man, //--0
woman // --1
}
public class Demo
{
public string Name { get; set; }
public Gender Gender { get; set; }
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddNewtonsoftJson();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "EnumDataRecord", Version = "v1" });
});
}
[HttpPost]
public IActionResult PostEnumData(Demo demo)
{
return Ok("");
}
[HttpGet]
public IActionResult GetEnumJson()
{
List<Demo> demoList = new List<Demo>();
Demo demo = new Demo();
demo.Name = "張三";
demo.Gender = Gender.man;
demoList.Add(demo);
Demo demo1 = new Demo();
demo1.Name = "李四";
demo1.Gender = Gender.woman;
demoList.Add(demo1);
string jsonString = JsonConvert.SerializeObject(demoList);
return Ok(jsonString);
}
``