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 ...
随机推荐
- hdu3746
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 根据不同的浏览器对不同元素进行css调整
<!if firefox> .element { top:4px; } <![endif]> <!if chrome> .element { top:6px; } ...
- JavaScript之延迟加载
本文参阅http://www.appelsiini.net/projects/lazyload Javascript Lazyload延迟加载特效,有效降低HTPP连接次数,提高首屏加载时间 1.增加 ...
- 在远程系统上开发 SharePoint 应用程序
适用范围: apps for SharePoint | Office 365 | SharePoint Foundation 2013 | SharePoint Server 2013 使用远程安装的 ...
- 北大ACM(POJ1009-Edge Detection)
Question:http://poj.org/problem?id=1009问题点:RLE编码. Memory: 648K Time: 547MS Language: C++ Result: Acc ...
- cocos2dx-lua 批量打包及修改
coco2dx目前大部分开发者肯定是用lua解决问题,问题来了,每次改一下lua配置可能你每次都得运行 cocos luacompile -p android 针对不同的平台,可能会有某些配置会略有不 ...
- Windows2003计划任务设置操作手册
任务需要重复执行,windows操作系统可以通过 任务计划的配置 达到效果:以下以windowsServer2003为例 1. Windows Server 2003 系统进入控制面板-任务计划 2. ...
- 关于iOS自定义UITabBar的几种方法
作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...
- UI1_UITableViewSearchController
// UI1_UITableViewSearchController // // Created by zhangxueming on 15/7/15. // Copyright (c) 2015年 ...
- UI5_HomeWork
// // View.h // UI5_HomeWork // // Created by zhangxueming on 15/7/2. // Copyright (c) 2015年 zhangxu ...