在博客园潜水多年,学到很多,也进步了很多,在这里说声谢谢,是时候给园友分享一点自己的东西,希望和大家一起进步.

之前有个需求要对一张表的多个时间字段进行不同的格式序列化,

在网上没找到相对较好的解决方案

就自己花了点时间研究了下,封装了下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同时对多个时间字段以不同的格式序列化的更多相关文章

  1. 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍

    全局引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象 目标对象 = JavaScriptCon ...

  2. Newtonsoft.Json随手记

    private static Newtonsoft.Json.JsonSerializerSettings CreateSettings(string dateFormat) { Newtonsoft ...

  3. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  4. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  5. Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  6. [转]Newtonsoft.Json 序列化和反序列化 时间格式

    本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...

  7. Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  8. Newtonsoft.Json 序列化和反序列化 以及时间格式

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  9. Newtonsoft.Json序列化字符串-格式化和时间格式问题

    最近C#中需要将实体进行json序列化,使用了Newtonsoft.Json public static void TestJson()        {            DataTable d ...

随机推荐

  1. ionic tabs-top

    类似QQ软件中,首页面消息和通话的两个按钮来回切换各自的内容,还是很常见的功能. (.bar-subheader是为了防止内容部分隐藏在header下) <ion-view title=&quo ...

  2. java多线程之Future和FutureTask

    Executor框架使用Runnable 作为其基本的任务表示形式.Runnable是一种有局限性的抽象,然后可以写入日志,或者共享的数据结构,但是他不能返回一个值. 许多任务实际上都是存在延迟计算的 ...

  3. hdu 4010 Query on The Trees LCT

    支持:1.添加边 x,y2.删边 x,y3.对于路径x,y上的所有节点的值加上w4.询问路径x,y上的所有节点的最大权值 分析:裸的lct...rev忘了清零死循环了两小时... 1:就是link操作 ...

  4. python字符串反转

    最一般的想法就是将字符串先转换成列表,倒置列表,再将列表转换为字符串 s = 'Hello world' l = list(s) l.reverse() python ''.join(l) 而pyth ...

  5. JAVA IO流的简单总结+收集日志异常信息

    1.字节流: IuputStream 所有字节输出流的超类 . 抽象类 ---- FileInputStream ---- BufferedInputStream:提供数据的读取效率,拓展方法(内部维 ...

  6. iOS UILabel自定义行间距时获取高度

    本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...

  7. Cookie和Session简介与区别

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

  8. Centos中安装PHP的PDO MySQL扩展的教程

    PHP Data Objects(PDO)扩展为 PHP 访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能.注意利用 PDO 扩展自身并 ...

  9. 20141124-JS函数

    函数: 函数是由事件驱动或者当它被调用时执行的可重复色代码块. <head> <script> function hanshu() { alert("你好!" ...

  10. UI2_视图切换ViewController

    // // SubViewController.h // UI2_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015 ...