.NetCore的Controller/WebAPI可以帮我们将返回结果自动转换为Json格式给前台,而且可以自由设定格式(大写、小写、首字母大写等),我总结了三种方法,对应三种灵活度,供大家参考

(一)通过Startup.cs设置项目级别的格式

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  在项目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()
                    });

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄