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

在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 { get; set; }

修改命名规则

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

 
  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<string, string> dict_props = null;
  4.     /// <summary>
  5.     /// 构造函数
  6.     /// </summary>
  7.     /// <param name="props">传入的属性数组</param>
  8.     public PropsContractResolver(Dictionary<string, string> 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<string, string> dictProp = new Dictionary<string, string> { { "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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值