Newtonsoft.Json同时对多个时间字段以不同的格式序列化
在博客园潜水多年,学到很多,也进步了很多,在这里说声谢谢,是时候给园友分享一点自己的东西,希望和大家一起进步.
之前有个需求要对一张表的多个时间字段进行不同的格式序列化,
在网上没找到相对较好的解决方案
就自己花了点时间研究了下,封装了下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同时对多个时间字段以不同的格式序列化的更多相关文章
- 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍
全局引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象 目标对象 = JavaScriptCon ...
- Newtonsoft.Json随手记
private static Newtonsoft.Json.JsonSerializerSettings CreateSettings(string dateFormat) { Newtonsoft ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- Newtonsoft.Json序列化字符串-格式化和时间格式问题
最近C#中需要将实体进行json序列化,使用了Newtonsoft.Json public static void TestJson() { DataTable d ...
随机推荐
- hdu 4612 Warm up 桥缩点
4612Warm hdu up 题目:给出一个图,添加一条边之后,问能够在新图中得到的最少的桥的数量. 分析:我们可以双联通分量进行缩点,原图变成了一棵树.问题变成了:求树中添加一条边之后,使得不在圈 ...
- asp.net MVC 如何隐藏 Response Header 版本号
根据借楼最少资源原则,有时候MVC需要隐藏自己的版本号,其实这里也是比较简单的,只需要在Global.ascx 的Application_Start()中添加一行代码既可 添加为 MVCHandle ...
- Android Studio 1.3新版体验
Google发布的Android Studio最新版是 1.3 版,上周的I/O大会中三位Google工程师对Android Studio作了将近1小时的演讲: 之前一直习惯用Eclipse luna ...
- c#中进程的使用
C#的Process类的一些用法 更多0 c# 进程 c#之process类相关整理 一.根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 usin ...
- 从数据库里面取值绑定到Ztree
1.效果图(思路:将数据库表按照一定的格式排序,然后序列化成json字符串,绑定到Ztree上并显示出来) zTree v3.5.16 API 文档 :http://www.ztree.me/v3/a ...
- XenApp简单部署
作者:MR.Yangwj 目录 XenApp简单部署... 1 一. XenApp安装... 1 (一) 服务器配置任务... 9 1) 许可证服务器配置... 9 ...
- 实例介绍Cocos2d-x精灵菜单和图片菜单
精灵菜单类是MenuItemSprite,图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite,所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢?那是 ...
- [转]解决win8.1右键菜单出现在左边
1.在控制面板中找到“Tablet PC 设置”窗口,选择“其他”选项卡. 2.在“左右手使用习惯”下,点选“惯用左手”,确定. •如果win8.1的控制面板里找不到Tablet PC 设置 •可以在 ...
- java利用反射绕过私有检查机制实行对private、protected成员变量或方法的访问
在java中,如果类里面的变量是声明了private的,那么只能在被类中访问,外界不能调用,如果是protected类型的,只能在子类或本包中调用,俗话说没有不透风的墙.但是可以利用java中的反射从 ...
- Spring里用@RequestParam接受Date类型的url参数
首先引入joda-time包.maven的dependency: <dependency> <groupId>joda-time</groupId> <art ...