排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
分类:
.NET Core
在ConfigureServices中可以进行全局json配置,例如,全局处理一下事件格式问题
services.AddMvc(option => { //option.Filters.Add(typeof(VisitorLogFilter));//全局注册ServiceFilter }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddJsonOptions(options => { // 格式化json输出的日期格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //options.SerializerSettings.ContractResolver = new DefaultContractResolver //{ // NamingStrategy = new SnakeCaseNamingStrategy() // json属性名下划线命名方式 //}; });
特性的方式改变日期格式(适合需要特殊处理日期格式的地方):
public class NewtonsoftDateConverter : IsoDateTimeConverter { public NewtonsoftDateConverter() { base.DateTimeFormat = "yyyy-MM-dd"; } }
使用:
[JsonConverter(typeof(NewtonsoftDateConverter))] public Nullable<System.DateTime> CreateTime { get; set; }
上面的写法是比较老的写法了,比较新一些的写法可以参考:
.net core 3.0+ json时间格式化 ,全局配置json时间序列化格式 - 忆点点的专栏 - TNBLOG
https://www.tnblog.net/aojiancc/article/details/3347
修改命名规则
配置首字母小写,其余大写按驼峰命名法
//按驼峰命名法(首字母小写,其余的单词首字母都是大写) options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
默认命名规则(不改变任何字符的情况下序列化)
//默认命名规则(不改变任何字符的情况下序列化) options.SerializerSettings.ContractResolver = new DefaultContractResolver();
如果你想要自己定义一种命名规范,例如全部是小写可以重写DefaultContractResolver即可
public class LowerCasePropertyNamesContractResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.ToLower(); } }
通过Newtonsoft.Json实现动态修改名字
有时候我们想要给不同的用户或者客户端提供不同的名字,又比如不同前台的组件需要不同格式的数据,我们可以动态的修改名字就不用为每个都重新定义一个新的模型。
和修改返回字段一样的去重写DefaultContractResolver
public class PropsContractResolver : DefaultContractResolver { Dictionary<string, string> dict_props = null; /// <summary> /// 构造函数 /// </summary> /// <param name="props">传入的属性数组</param> public PropsContractResolver(Dictionary<string, string> dictPropertyName) { //指定字段要序列化成什么名称 this.dict_props = dictPropertyName; } protected override string ResolvePropertyName(string propertyName) { string newPropertyName = string.Empty; if (dict_props != null && dict_props.TryGetValue(propertyName, out newPropertyName)) { return newPropertyName; } else { //没有找到就用原来的 return base.ResolvePropertyName(propertyName); } } }
使用:
JsonSerializerSettings jsetting = new JsonSerializerSettings(); //jsetting.ContractResolver = new LimitPropsContractResolver(new string[] { "title", "aClass" }, LimitType.Contains); Dictionary<string, string> dictProp = new Dictionary<string, string> { { "Id", "MyId" }, { "Title", "MyTitle" } }; jsetting.ContractResolver = new PropsContractResolver(dictProp); 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
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739
评价