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

标记: ServiceStack.Text,json,序列化,日期

在使用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. ??????public static bool MsDatetimeFormat
  3. ??????{
  4. ??????????get { return dMsDatetimeFormat; }
  5. ??????????set { dMsDatetimeFormat = value; }
  6. ??????}

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

接着 修改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. ????????if (JsConfig.DateHandler == DateHandler.ISO8601)
  8. ????????{
  9. ????????????writer.Write(dateTime.ToString("o", CultureInfo.InvariantCulture));
  10. ????????????return;
  11. ????????}
  12. ????????if (JsConfig.DateHandler == DateHandler.RFC1123)
  13. ????????{
  14. ????????????writer.Write(dateTime.ToUniversalTime().ToString("R", CultureInfo.InvariantCulture));
  15. ????????????return;
  16. ????????}
  17. ????????var timestamp = dateTime.ToUnixTimeMs();
  18. ????????string offset = null;
  19. ????????if (dateTime.Kind != DateTimeKind.Utc)
  20. ????????{
  21. ????????????if (JsConfig.DateHandler == DateHandler.TimestampOffset && dateTime.Kind == DateTimeKind.Unspecified)
  22. ????????????????offset = UnspecifiedOffset;
  23. ????????????else
  24. ????????????????offset = LocalTimeZone.GetUtcOffset(dateTime).ToTimeOffsetString();
  25. ????????}
  26. ????????else
  27. ????????{
  28. ????????????// Normally the JsonDateHandler.TimestampOffset doesn't append an offset for Utc dates, but if
  29. ????????????// the JsConfig.AppendUtcOffset is set then we will
  30. ????????????if (JsConfig.DateHandler == DateHandler.TimestampOffset && JsConfig.AppendUtcOffset.HasValue && JsConfig.AppendUtcOffset.Value)
  31. ????????????????offset = UtcOffset;
  32. ????????}
  33. ????????if (JsConfig.MsDatetimeFormat)
  34. ????????{
  35. ????????????writer.Write(dateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  36. ????????}
  37. ????????else
  38. ????????{
  39. ????????????writer.Write(EscapedWcfJsonPrefix);
  40. ????????????writer.Write(timestamp);
  41. ????????????if (offset != null)
  42. ????????????{
  43. ????????????????writer.Write(offset);
  44. ????????????}
  45. ????????????writer.Write(EscapedWcfJsonSuffix);
  46. ????????}
  47. ????}

这样再使用序列化方法的时候返回的就是’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,序列化,日期

时间: 2024-10-03 13:45:19

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

spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

SpringMVC返回Json,自定义Json中Date类型格式

http://www.cnblogs.com/jsczljh/p/3654636.html ———————————————————————————————————————————————————————————— SpringMVC返回Json,自定义Json中Date类型格式 SpringMVC返回Json数据依赖jackson这个开源的第三方类库. 若不加任何说明情况下Date类型将以时间戳的形式转换为Json并返回. jackson提供了一些自定义格式的方法.我们只需继承它的抽象类Json

JSON中的日期格式化

Json字符串中的日期格式化函数 ConvertJsonDate: function (jd) { var d = new Date(parseInt(jd.replace("/Date(", "").replace(")/", ""), 10)); if (d.toString().split("-").length > 1) { return d; } var month = { "Ja

Java处理Excel中的日期格式

Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  | 在Excel中的日期格式,其数值为距离1900年1月1日的天数,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理.正确的处理方法是先判断单元格的类型是否则NUMERIC

js中转化日期格式

format =function(date){ var value=""; var reDate="/\d{4}-\d{2}-\d{2}/gi"; value=date.match(reDate) var  arr=new Array(); arr=value.split("-"); value=arr[0]+"年"+arr[1]+"月"+arr[2]+"/日" return value

项目总结2--Oracle中时间日期格式

在Oracle中,方法没有SQL Server那么多 一 转换方法to_date() :作用将字符类型按一定格式转化为日期类型: to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') to_char():转换成字符串类型,如:To_char(1234.5, '$9999.9'),结果:$1234.5 to_number() :转换成数值类型,如:To_number('1234.5'),结果:1234.5 Oracle的to_date()方

C# JSON序列化日期格式问题

默认序列化日期为1970至今的时间戳 需要在json.convert中做一些设置 //JavaScriptSerializer js = new JavaScriptSerializer(); IsoDateTimeConverter timeConverter = new IsoDateTimeConverter(); //这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式 //timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH

工具类:关于解决数据库中的日期格式,经过response.getWriter().write(json)打到前台日期格式混乱的问题的总结

经过response.getWriter().write(json)打到前台日期格式混乱的问题的总结 import java.text.SimpleDateFormat;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor; public class DateJsonValueProcessor implements JsonValueProcessor{ private String for

使用Jackson时转换JSON时,日期格式设置

近日,使用Jackson转化JSON对象的时候,现: 显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式.后来一查果然有两种方式来实 1.普通的方式: 默认是转成timestamps形式的,通过下面方式可以取消timestamps. objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);   这样将使时间