【问题标题】:.NET DataContractJsonSerializer DateTime format.NET DataContractJsonSerializer 日期时间格式
【发布时间】:2018-06-26 21:54:40
【问题描述】:

有谁知道我在哪里可以找到关于 .NET DataContractJsonSerializer 类使用的 DateTime 格式的文档?我一直在寻找一段时间,但找不到它。首先,我知道您可以通过将设置传递给此类来提供自己的格式,但是,如果我使用默认格式,我希望能够记录下来。基本上,如果有人决定不使用 DataContractJsonSerializer 类来反序列化我的 json 字符串,他们就会知道如何将 DateTime 对象转换回其原生 DateTime 类型。还是 DataContractJsonSerializer 类独有的东西?

例如:

MemoryStream stream1 = new MemoryStream();  
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
DateTime now = DateTime.Now;
Console.WriteLine(now.ToString());        // "6/26/2018 5:37:31 PM"
ser.WriteObject(stream1, now);
ms.StartPosition = 0;

StreamReader sr = new StreamReader(stream1);  
Console.WriteLine("JSON DateTime Format: ");  
Console.WriteLine(sr.ReadToEnd());        // "\/Date(1530049051609-0400)\/"

那么“6/26/2018 5:37:31 PM”->“1530049051609-0400”->“6/26/2018 5:37:31 PM”的文档在哪里?或者有没有。

【问题讨论】:

  • ser.WriteObject(stream1, now.ToString());
  • @Hackerman 有点违背了目的,因为您将序列化 string 而不是 DateTime?
  • 您可以使用它,所以应该没问题...无论如何,首先我们需要了解 JSON 代表 JavaScript object notation...所以 Date(1530049051609-0400) 它是一个有效的 JavaScript 日期。事实上,如果你在浏览器控制台中粘贴Date(1530049051609-0400),你应该会看到类似于"Wed Jun 27 2018 13:27:32 GMT-0400 (hora estándar de Chile)"
  • 是的,我认为 JSON 可以被多种语言读取是显而易见的,但仍然缺少问题的重点,即要求提供有关 .net json 序列化程序格式转换方法的特定文档,而不是解决方法。
  • 不,你不明白,至少我试过了……

标签: c# .net json


【解决方案1】:

使用以下方法,我能够序列化 DateTime 对象,然后反序列化它。

DateTime now = DateTime.Now;

string json = "";
using (MemoryStream ms = new MemoryStream()) {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
    ser.WriteObject(ms, now);
    byte[] jsonByte = ms.ToArray();

    json = Encoding.UTF8.GetString(jsonByte, 0, jsonByte.Length);
}

DateTime? deserializedDateTime = new DateTime();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedDateTime.GetType());
    deserializedDateTime = ser.ReadObject(ms) as DateTime?;
}

Console.WriteLine("Object to JSON:");
Console.WriteLine(json);
Console.WriteLine("JSON to Object:");
Console.WriteLine(deserializedDateTime.ToString());

就文档而言,我使用了以下站点并修改了一些示例代码。

【讨论】:

    【解决方案2】:

    这是自 Unix 纪元 (1/1/1970 00:00:00 UTC) 以来的毫秒数。 -0400 是您的时区偏移量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多