asp.net webapi Datetime 序列化\反序列化为时间…
2018-06-22 07:47:42来源:未知 阅读 ()
项目需求原因需要把Webapi中的Datetime 序列化及反序列化时间戳(long),遇到相同问题的同学可作参考。
1.声明一个时间戳转换器
1 public class UnixDateTimeConvertor : DateTimeConverterBase 2 { 3 4 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 5 { 6 long jsTimeStamp = long.Parse(reader.Value.ToString()); 7 System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 8 DateTime dt = startTime.AddMilliseconds(jsTimeStamp); 9 return dt; 10 } 11 12 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 13 { 14 System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 15 long timeStamp = (long)(((DateTime)value) - startTime).TotalMilliseconds; 16 writer.WriteValue(timeStamp); 17 } 18 }
2.配置使用时间戳转换器(到这一步API就能序列化和反序列化时间戳了)
1 public static class WebApiConfig 2 { 3 public static void Register(HttpConfiguration config) 4 { 5 //启用标记路由功能 6 config.MapHttpAttributeRoutes(); 7 8 config.Routes.MapHttpRoute( 9 name: "DefaultApi", 10 routeTemplate: "api/{controller}/{id}", 11 defaults: new { id = RouteParameter.Optional } 12 ); 13 15 //设置Datetime 到 時間戳 的互轉 16 JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings() 17 { 18 Formatting = Formatting.Indented, 19 DateTimeZoneHandling = DateTimeZoneHandling.Local 20 }; 21 jSettings.Converters.Add(new UnixDateTimeConvertor()); 22 config.Formatters.JsonFormatter.SerializerSettings = jSettings; 23 24 } 25 }
3.因为项目中使用了Swagger UI自动生成WebApi文档如果想接口文档Datetime显示的Example是时间戳可以如以下设置,在你自己的SwaggerConfig设置中添加Datetime及Datetime?的映射和默认值
1 config 2 .EnableSwagger(c => 3 { 4 //...省略无关代码 5 6 System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 7 long exampleVal = (long)(DateTime.Now - startTime).TotalMilliseconds; 8 Schema timeSchema = new Schema { type = "number", format = "long", example = exampleVal }; 9 10 c.MapType<DateTime?>(() => timeSchema); 11 c.MapType<DateTime>(() => timeSchema); 12 13 });
最终生成的Webapi文档显示如下
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash