应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core webapi json相关,全局配置,时间格式化,首字母小写等

9056人阅读 2019/11/13 12:07 总访问:5179895 评论:0 收藏:0 手机
分类: .NET Core


在ConfigureServices中可以进行全局json配置,例如,全局处理一下事件格式问题

  1. services.AddMvc(option =>
  2. {
  3.     //option.Filters.Add(typeof(VisitorLogFilter));//全局注册ServiceFilter
  4. }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddJsonOptions(options =>
  5. {
  6.     // 格式化json输出的日期格式
  7.     options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
  8.     //options.SerializerSettings.ContractResolver = new DefaultContractResolver
  9.     //{
  10.     //    NamingStrategy = new SnakeCaseNamingStrategy()  // json属性名下划线命名方式
  11.     //};
  12. });

特性的方式改变日期格式(适合需要特殊处理日期格式的地方):

  1.  public class NewtonsoftDateConverter : IsoDateTimeConverter
  2.     {
  3.         public NewtonsoftDateConverter()
  4.         {
  5.             base.DateTimeFormat = "yyyy-MM-dd";
  6.         }
  7.     }

使用:

  1. [JsonConverter(typeof(NewtonsoftDateConverter))]
  2. public Nullable<System.DateTime> CreateTime { getset; }


上面的写法是比较老的写法了,比较新一些的写法可以参考:
.net core 3.0+ json时间格式化 ,全局配置json时间序列化格式 - 忆点点的专栏 - TNBLOG
https://www.tnblog.net/aojiancc/article/details/3347

修改命名规则

配置首字母小写,其余大写按驼峰命名法

  1. //按驼峰命名法(首字母小写,其余的单词首字母都是大写)
  2. options.SerializerSettings.ContractResolver =  new CamelCasePropertyNamesContractResolver();

默认命名规则(不改变任何字符的情况下序列化)

  1. //默认命名规则(不改变任何字符的情况下序列化)
  2. options.SerializerSettings.ContractResolver = new DefaultContractResolver();

如果你想要自己定义一种命名规范,例如全部是小写可以重写DefaultContractResolver即可

  1. public class LowerCasePropertyNamesContractResolver : DefaultContractResolver
  2. {
  3.    protected override string ResolvePropertyName(string propertyName)
  4.    {
  5.        return propertyName.ToLower();
  6.    }
  7. }


通过Newtonsoft.Json实现动态修改名字

有时候我们想要给不同的用户或者客户端提供不同的名字,又比如不同前台的组件需要不同格式的数据,我们可以动态的修改名字就不用为每个都重新定义一个新的模型。

和修改返回字段一样的去重写DefaultContractResolver

  1. public class PropsContractResolver : DefaultContractResolver
  2. {
  3.     Dictionary<stringstring> dict_props = null;
  4.     /// <summary>
  5.     /// 构造函数
  6.     /// </summary>
  7.     /// <param name="props">传入的属性数组</param>
  8.     public PropsContractResolver(Dictionary<stringstring> dictPropertyName)
  9.     {
  10.         //指定字段要序列化成什么名称
  11.         this.dict_props = dictPropertyName;
  12.     }
  13.     protected override string ResolvePropertyName(string propertyName)
  14.     {
  15.         string newPropertyName = string.Empty;
  16.         if (dict_props != null && dict_props.TryGetValue(propertyName, out newPropertyName))
  17.         {
  18.             return newPropertyName;
  19.         }
  20.         else
  21.         {
  22.             //没有找到就用原来的
  23.             return base.ResolvePropertyName(propertyName);
  24.         }
  25.     }
  26. }

使用:

  1. JsonSerializerSettings jsetting = new JsonSerializerSettings();
  2. //jsetting.ContractResolver = new LimitPropsContractResolver(new string[] { "title", "aClass" }, LimitType.Contains);
  3. Dictionary<stringstring> dictProp = new Dictionary<stringstring> { { "Id""MyId" }, { "Title""MyTitle" } };
  4. jsetting.ContractResolver = new PropsContractResolver(dictProp);
  5. string jsonstr = JsonConvert.SerializeObject(art, Formatting.Indented, jsetting);

这里我们把Id修改成了MyId,Title修改成了MyTitle


net core api中默认使用的是Newtonsoft.Json,关于net core api中Newtonsoft.Json的更多用法可以参考:

http://www.tnblog.net/aojiancc2/article/details/2828

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

Service-stack.redis配置连接池与读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List&lt;string&gt;writes=newList&lt;string&gt;(); writes.Add(&quot;123456a...

Service-stack.redis操作Redis 并发相关问题

1:不要循环去创建对象,循环去访问redis的时候要特别注意,应该传一个集合进去处理,而不是循环去处理2:要注意释放对象,使...

Swift-通知相关整理大全

通知中?心(UNUserNotifications) 请求通知权限 ...

.net HttpClient和webapi相关的东东先记录一点。传递Authorization headertoken

get请求传递Authorization header,tokenstringurl=&quot;你请求的url&quot;; stringtoken=&quot;yourtoken&quot;; Http...

css基础选择器和字体相关样式

今天学习了css基础选择器感觉自己又成长了1、内部样式表&lt;head&gt; &lt;styletype=&quot;text/CSS&quot;&gt; 选择器{属...

Oracle 事务相关

1、Oracle事务处理事务用于确保数据库数据的一致性,事务处理和锁是两个紧密联系的概念。事务就是一个单元的工作,包括一系...

.net core安全相关源码地址

https://github.com/aspnet/Security具体的DefaultAuthorizationService类地址:https://github.com/aspnet/Security/blob/...

identity server4 cookie相关配置

如果我们这一配置的话在登录后就可以看到cookie信息

bootstrap设置边框相关样式

添加或者移除边框 &lt;span class=&quot;border&quot;&gt;&lt;/span&gt; &lt;span class=&quot;border border-0&quot;&gt...

linux文件与目录相关命令

查看当前路径命令:pwd 查看当前目录下的文件及目录:ls1、 -A 显示所有文件,而且知道了 linux的隐藏文件 都是以“.”开头...

.net core nuget 安装ef相关的命令ef常用依赖

ef的核心安装,一般使用code first什么的只需要这一个就可以了Install-PackageMicrosoft.EntityFrameworkCore.SqlServer-ve...

.netcore3.1 RabbitMq 简单运用与相关方法的介绍

.netcore3.1 RabbitMq 简单运用与相关方法的介绍[TOC] 在这里我将使用简单的生产—-&gt;加入队列—-&gt;消费,做一个简...

.netcore3.1 RabbitMq 讲讲相关方法

.netcore3.1 RabbitMq 讲讲相关方法[TOC] QueueDeclare方法 这是一个创建队列的方法,参数以及参数描述由下图所示: ...

Go 的相关接口

Go 的相关接口[TOC] Go 接口 主要差异 接口为非入侵性,实现不依赖于接口定义所以接口的定义可以包含在接口使用者包内...

使用反射 访问 相关属性字段方法等

//类 publicclassMethod { publicstringFather{get;set;} publicstringChlidname{get;set;} publicint?count{get;set...