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 ...
随机推荐
- AspNetPager学习使用2
接上回: <webdiyer:aspnetpager id=" FirstPageText="首页"LastPageText="尾页" Next ...
- Javascript中二级联动
主要使用到到了地址JSON格式,来做,没有涉及数据库的读取. <!DOCTYPE html><html><head> <meta charset=" ...
- CCNA长语
思科认证网络支持工程师(Cisco Certified Network Associate_CCNA) 专业英文词汇大全 10BaseT-----原始IEEE802.3标准的一部分,1OBaseT是1 ...
- ASP.NET 跨域获取JSON天气数据
前几天做一个门户网站,在首页需要加载气象数据,采用了中央气象局的接口. 刚开始采用JSONP在前台跨域请求数据,没成功~ 后换成在c#后台请求数据返回... 前端代码: $(function () { ...
- Windows Phone 8开发环境搭建
开发Windows Phone需要两个工具:Windows Phone SDK 8.0和Visual Studio集成开发工具.我们购买的Visual Studio Ultimate 2012不包括W ...
- 关于App Transport Security的更新,中英文对照 --Xcode 7 --iOS9
章节都为本人定义,无抄袭,其中英文部分内容为官方文档摘抄以及自己总结,翻译的不好,敬请指正 App Transport Security(暂且翻译为app传输安全) What is ATS? App ...
- java使用BufferedImage和Graphics实现图片合成
package com.igoxin.weixin.custom; import java.awt.Graphics; import java.awt.image.BufferedImage; imp ...
- 20141111--SQL触发器
---------------------触发器----------------------------- --触发器本质上还是一个存储过程,trigger --只不过不是通过exec调用执行,而是通 ...
- PHP的final、抽象类和方法
final关键字的用法 final class Computer{ //无法继承的类 final public function run(){ //无法继承的方法 } } class NoteBook ...
- NodeJs多进程和socket.io通讯-DEMO
一.开启多进程 const os = require('os'); const cp = require('child_process'); const forkList = {}; const fo ...