zoukankan      html  css  js  c++  java
  • 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.  
    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;

  • 相关阅读:
    使用python3自带工具2to3.py 转换 python2.x 代码 到python3
    python2代码转换python3(2018新)
    解析搜狗词库(python)
    把搜狗输入法词库导入Google拼音输入法
    QT 窗体控件的透明度设置(三种方法)
    Telnet协议详解(远程登陆协议)
    C++游戏开发需要阅读的书籍
    explicit的作用
    C#7.0
    ES6-2
  • 原文地址:https://www.cnblogs.com/wang2650/p/4853993.html
Copyright © 2011-2022 走看看