Newtonsoft.Json同时对多个时间字段以不同的格式序列化
2015-03-14 14:58
701 查看
在博客园潜水多年,学到很多,也进步了很多,在这里说声谢谢,是时候给园友分享一点自己的东西,希望和大家一起进步.
之前有个需求要对一张表的多个时间字段进行不同的格式序列化,
在网上没找到相对较好的解决方案
就自己花了点时间研究了下,封装了下IsoDateTimeConverter这个类得以实现
不多说直接上源码
使用方法
最后如果有问题欢迎和我技术交流
QQ: 512 021 512
之前有个需求要对一张表的多个时间字段进行不同的格式序列化,
在网上没找到相对较好的解决方案
就自己花了点时间研究了下,封装了下IsoDateTimeConverter这个类得以实现
不多说直接上源码
using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace LenovoCW.Library { /// <summary> /// 时间序列化 /// </summary> public class DateTimeJson : IsoDateTimeConverter { /// <summary> /// 序列化格式集合 /// </summary> public Dictionary<string, string> formatlist = new Dictionary<string, string>(); /// <summary> /// 时间序列化 /// </summary> /// <param name="type">序列化类型</param> /// <param name="format">默认序列化格式</param> public DateTimeJson(Type type=null,string format = "yyyy-MM-dd HH:mm") { formatlist["default_format"] = format; if (type != null) { var pro = type.GetProperties(); foreach (var item in pro) { var displayformat = Attribute.GetCustomAttribute(item, typeof(DisplayFormatAttribute)) as DisplayFormatAttribute; if (displayformat != null) { formatlist[item.Name] = displayformat.DataFormatString; } } } } /// <summary> /// 创建时间序列化对象 /// </summary> /// <param name="type">序列化类型</param> /// <param name="format">序列化类型</param> /// <returns>时间序列化对象</returns> public static DateTimeJson Create(Type type = null, string format = "yyyy-MM-dd HH:mm") { return new DateTimeJson(type, format); } /// <summary> /// 创建时间序列化对象 /// </summary> /// <typeparam name="model">指定的模型</typeparam> /// <param name="format">序列化类型</param> /// <returns>时间序列化对象</returns> public static DateTimeJson Create<model>(string format = "yyyy-MM-dd HH:mm") { return new DateTimeJson(typeof(model), format); } /// <summary> /// 添加序列化格式 /// </summary> /// <param name="name">序列化字段名称</param> /// <param name="format">序列化格式</param> /// <returns>时间序列化</returns> public DateTimeJson Add(string name, string format) { formatlist[name] = format; return this; } /// <summary> /// 写序列化方法 /// </summary> /// <param name="writer">写入对象</param> /// <param name="value">值</param> /// <param name="serializer">调用序列化对象</param> public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) { var name = writer.Path.Substring(writer.Path.LastIndexOf('.') + 1); if (formatlist.ContainsKey(name)) { base.DateTimeFormat = formatlist[name]; } else { base.DateTimeFormat = formatlist["default_format"]; } base.WriteJson(writer, value, serializer); } } }
使用方法
public class User { [DisplayFormat(DataFormatString = "yyyy-MM")] public DateTime addtime { get; set; } [DisplayFormat(DataFormatString = "yyyy-MM-dd HH:mm")] public DateTime updtime { get; set; } [DisplayFormat(DataFormatString = "yyyy-MM-dd")] public DateTime birthday { get; set; } } //使用方法一(需要添加DisplayFormat特性) JsonConvert.SerializeObject(userlist, DateTimeJson.Create<User>()); //使用方法二(可以不用添加DisplayFormat特性) JsonConvert.SerializeObject(userlist, DateTimeJson.Create().Add("addtime", "yyyy-MM").Add("updtime", "yyyy-MM-dd HH:mm").Add("birthday", "yyyy-MM-dd"));
最后如果有问题欢迎和我技术交流
QQ: 512 021 512
相关文章推荐
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2
- Newtonsoft.Json 序列化和反序列化 以及时间格式
- Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
- Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
- Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
- json时间格式(时间戳)转成Extjs日期格式(grid字段的时间)
- JavaScriptSerializer 序列化json 时间格式
- .NET 自定义Json序列化时间格式
- Newtonsoft.Json 时间格式设置,替换null为""
- Newtonsoft.Json序列化 对时间格式化处理
- C#使用NewtonSoft进行Json序列化,设置字段首字母小写方法
- Newtonsoft.Json.JsonConvert 序列化日期时间
- Json.net动态序列化以及对时间格式的处理
- Newtonsoft.Json对object进行json转化(时间格式的处理)
- JavaScriptSerializer 序列化json 时间格式-收集
- Json序列化空时间字段出异常