.NetCore自定義WebAPI返回Json的格式大小寫的三種方式


.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()
                    });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM