• .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()
                        });
  • 相关阅读:
    BootStrap 智能表单系列 五 表单依赖插件处理
    BootStrap 智能表单系列 四 表单布局介绍
    BootStrap 智能表单系列 三 分块表单配置的介绍
    LinQ.OrderBy 多个字段排序
    ABP.NET CORE 遇到的小问题
    vs2017断点无效 当前不会命中断点 已设置断点单还未绑定
    DateTime 取年月日;字符串截取
    C# DateTime 多个时间段循环相加;两个时间段求差值
    ABP.Net Core 小白使用教程 附件:ABP.NET中文文档
    ASP.NET MVC+Easyui 后台管理系统的图片上传
  • 原文地址:https://www.cnblogs.com/cdoneiX/p/12206803.html
Copyright © 2020-2023  润新知