.NetCore的Controller/WebAPI可以幫我們將返回結果自動轉換為Json格式給前台,而且可以自由設定格式(大寫、小寫、首字母大寫等),我總結了三種方法,對應三種靈活度,供大家參考
(一)通過Startup.cs設置項目級別的格式
在項目Startup.cs中增加如下配置:
services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
默認為保持原樣,也可設定為CamelCasePropertyNamesContractResolver(),即首字母小寫的駝峰格式。
本身是沒有將屬性全部小寫的方法,我這里提供一個參考,大家可以自定義想要的格式:
public class LowercaseContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.ToLower(); } }
(二)設置Controller/WebAPI級別的統一格式轉換,這里用到了ActionFilterAttribute,擴展出一個CustomActionJsonFormatAttribute標簽
public class CustomActionJsonFormatAttribute : ActionFilterAttribute { private Type _ContractResolver { get; set; } public CustomActionJsonFormatAttribute(Type ContractResolver) { _ContractResolver = ContractResolver; } public override void OnActionExecuted(ActionExecutedContext actionExecutedContext) {var jsonResult = (JsonResult)actionExecutedContext.Result; jsonResult.SerializerSettings = new JsonSerializerSettings { ContractResolver = Activator.CreateInstance(_ContractResolver) as IContractResolver }; actionExecutedContext.Result = jsonResult; } }
使用時在Controller/WebAPI中添加如下代碼即可,即可以在class層面添加,也可以在Action上添加:
[CustomActionJsonFormat(typeof(LowercaseContractResolver))]
public IActionResult EntityInfo([Required]string entityid) { ... }
(三)在代碼返回的時候設置JsonResult,這個是最靈活但也最麻煩的方式:
return new JsonResult(new Entity { EntityId = entityid, Name = entityType.Name, OrganizationId = Permission.getCurrentUserOrg().ORG_GID }, new JsonSerializerSettings { ContractResolver = new LowercaseContractResolver() });
