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 ...
随机推荐
- 10 Interesting Linux Command Line Tricks and Tips Worth Knowing
I passionately enjoy working with commands as they offer more control over a Linux system than GUIs( ...
- HTML5_用语义化标记重新定义博客
HTML5文档的第一行便是文档类型声明,文档类型声明的作用有两个 一:验证器依据文档类型来判断采用何种验证规则去验证代码 二:文档类型声明能够强制IE6,IE7,IE8以“标准模式”渲染页面 1: & ...
- Android 混淆与混淆过滤
Android 中代码混淆一般用的是ProGuard.它除了混淆代码之后还有其它许多实用的功能.这里主要记录混淆相关的实现. 1.ProGuard的作用 删除无用代码,压缩和优化Class文件,缩小A ...
- 慎用memset();
<span style="font-family: Arial, Helvetica, sans-serif;">void *(memset) (void *s,int ...
- java创建Date日期时间笔记
(1)public Date() 创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间. 例: Java代码 1.Date today=new Date(); //today被设置成创建时刻相 ...
- sql 计算两时间或日期 的相差的 年、 月、 日、时、分、秒,年、月、日分别的提取
--年.月.日.时.分.秒 datediff(yy,date1,date2) datediff(m,date1,date2) datediff(d,date1,date2) datediff(hh,d ...
- hive安装配置错误
1.Access denied for user 'hive'@'localhost' (using password: YES) 解决办法: 执行 hive --service metastore ...
- IOS 模仿TableView封装
一.先贴一下未封装的代号,好跟后面的对比 @interface MTHomeDropdown : UIView + (instancetype)dropdown; @property (nonatom ...
- 20150216—winform中的DataGridView
DataGridView的主要作用是用来按列表来显示信息,其信息的数据源可以是SQL数据库,也可以是一个列表式的集合. DataGridView的位置:工具箱--数据--DataGridView.如下 ...
- WCF之服务元数据
服务元数据是用来获得服务的EndPoint的信息,也就是它的ABC. 服务有两种方案可以发布自己的元数据. 一种是基于HTTP-GET协议提供元数据: 一种是元数据交换方式,它往往使用一个专门的终结点 ...