【问题标题】:create a JSON DateTime string with .NET使用 .NET 创建 JSON DateTime 字符串
【发布时间】:2009-12-04 15:46:12
【问题描述】:

出于一个对这个问题无关紧要的奇怪原因,我需要创建一个表示 DateTime 的 JSON 兼容子字符串,并将手动插入到更大的 JSON 字符串中,稍后将由 .NET 的 DataContractJsonSerializer 解析。我想出了以下方法:

static readonly DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(DateTime));
private static string ToJsonString(DateTime time)
{
 using (var memStream = new MemoryStream())
 {
  s.WriteObject(memStream, time);
  return Encoding.UTF8.GetString(memStream.ToArray());
 }
}

有没有更简单的方法可以做到这一点,或者上面的代码可以以任何方式优化吗?还是上面的代码有错误?

另外,如果我可以在不使用 DataContractJsonSerializer 的情况下做到这一点,那就太棒了,因为字符串构建也将在纯 .NET 1.1 进程中完成。

【问题讨论】:

    标签: .net json datetime


    【解决方案1】:

    您可以使用从纪元开始的毫秒时间方法吗?喜欢这种扩展方式吗?

     public static class DateTimeExtensions
        {
            private static readonly DateTime Epoch = new DateTime(1970, 1, 1);
    
            public static string ToJson(this DateTime time)
            {
                return string.Format("\\/{0:0}\\/", (time - Epoch).TotalMilliseconds);
            }
        }
    

    【讨论】:

    • 这真的安全吗? UTC 与本地时间怎么样,我注意到 DataContractJsonSerializer 为它们创建了不同的字符串。谁知道它会创建一个不同的字符串....
    • 我想您可以先将 DateTime 转换为 UTC,然后再进行计算。只需在减法之前执行 DateTime.ToUniversalTime()。
    【解决方案2】:

    我将使用 NewtonSoft JSON 并将序列化 DateTime 的责任委托给它。它支持将 DateTime 序列化为 ISO 8601 格式(2008-04-12T12:53Z 等),并且比 DataContractJsonSerializer 可靠得多。

    您可以使用它来序列化本机对象或将其用作文本编写器来手动生成 JSON。相信我,使用它比写出字符串更容易。

    http://www.codeplex.com/Json

    或者,您可以将其包装在 ToString 逻辑中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2013-09-24
      • 2021-07-09
      相关资源
      最近更新 更多