码迷,mamicode.com
首页 > Web开发 > 详细

ServiceStack.Text json中序列化日期格式问题的解决

时间:2015-10-04 00:23:27      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

在使用ServiceStack.Text的序列化为json格式的时候,当属性为datetime的时候,返回的是一个new date(324234234)的字符串,看着非常不爽。 如果是js来获取结果还好,

如果是c#获取这种字符串是没有办法转化为时间的。 所以我改造了下,让返回的是‘2015-06-06 09:11:11’的格式。

先获取源码, 然后在jsconfig.cs中加入如下代码

Code Snippet
  1. private static bool dMsDatetimeFormat=true;
  2.  
  3. ??????public static bool MsDatetimeFormat
  4. ??????{
  5. ??????????get { return dMsDatetimeFormat; }
  6. ??????????set { dMsDatetimeFormat = value; }
  7. ??????}

 

这是用来标示是否转化为刚才看到的那种自定义的格式。

接着 修改DateTimeSerializer.cs文件的   public static void WriteWcfJsonDate(TextWriter writer, DateTime dateTime)方法

修改后的代码如下

 

Code Snippet
  1. public static void WriteWcfJsonDate(TextWriter writer, DateTime dateTime)
  2. ????{
  3. ????????if (JsConfig.AssumeUtc && dateTime.Kind == DateTimeKind.Unspecified)
  4. ????????{
  5. ????????????dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
  6. ????????}
  7.  
  8. ????????if (JsConfig.DateHandler == DateHandler.ISO8601)
  9. ????????{
  10. ????????????writer.Write(dateTime.ToString("o", CultureInfo.InvariantCulture));
  11. ????????????return;
  12. ????????}
  13.  
  14. ????????if (JsConfig.DateHandler == DateHandler.RFC1123)
  15. ????????{
  16. ????????????writer.Write(dateTime.ToUniversalTime().ToString("R", CultureInfo.InvariantCulture));
  17. ????????????return;
  18. ????????}
  19.  
  20. ????????var timestamp = dateTime.ToUnixTimeMs();
  21. ????????string offset = null;
  22. ????????if (dateTime.Kind != DateTimeKind.Utc)
  23. ????????{
  24. ????????????if (JsConfig.DateHandler == DateHandler.TimestampOffset && dateTime.Kind == DateTimeKind.Unspecified)
  25. ????????????????offset = UnspecifiedOffset;
  26. ????????????else
  27. ????????????????offset = LocalTimeZone.GetUtcOffset(dateTime).ToTimeOffsetString();
  28. ????????}
  29. ????????else
  30. ????????{
  31. ????????????// Normally the JsonDateHandler.TimestampOffset doesn't append an offset for Utc dates, but if
  32. ????????????// the JsConfig.AppendUtcOffset is set then we will
  33. ????????????if (JsConfig.DateHandler == DateHandler.TimestampOffset && JsConfig.AppendUtcOffset.HasValue && JsConfig.AppendUtcOffset.Value)
  34. ????????????????offset = UtcOffset;
  35. ????????}
  36.  
  37. ????????if (JsConfig.MsDatetimeFormat)
  38. ????????{
  39. ????????????writer.Write(dateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  40. ????????}
  41. ????????else
  42. ????????{
  43.  
  44. ????????????writer.Write(EscapedWcfJsonPrefix);
  45. ????????????writer.Write(timestamp);
  46. ????????????if (offset != null)
  47. ????????????{
  48. ????????????????writer.Write(offset);
  49. ????????????}
  50. ????????????writer.Write(EscapedWcfJsonSuffix);
  51. ????????}
  52.  
  53.  
  54. ????}

这样再使用序列化方法的时候返回的就是’2015-09-08  11:11:11’的格式了

 

Code Snippet
  1. ServiceStack.Text.JsonSerializer.SerializeToString(new
  2. ????????????????{???date=DateTime.Now,
  3. ????????????????????SecureContent = "here's some secure content that you can only see if you provide a correct apiKey",
  4. ????????????????????User = "user"
  5. ????????????????})

 

当你不想用的时候,想恢复默认的方式,只要序列化前用这句就行了

ServiceStack.Text.JsConfig.MsDatetimeFormat = false;

ServiceStack.Text json中序列化日期格式问题的解决

标签:

原文地址:http://www.cnblogs.com/wang2650/p/4853993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!