【问题标题】:How to read DateTimeOffset serialized by DataContractJsonSerializer如何读取 DataContractJsonSerializer 序列化的 DateTimeOffset
【发布时间】:2011-09-09 10:53:39
【问题描述】:

我使用 DataContractJsonSerializer 序列化了一个包含 DateTimeOffset 数据类型的当前日期的对象。这是我得到的输出:

<root type="object">
<blah type="object">
<DateTime>/Date(1315565372414)/</DateTime>
<OffsetMinutes type="number">300</OffsetMinutes>
</blah>
</root>

我如何理解这一点?如何将数字 1315565372414 转换回日期? 我的客户正在 python 中接收这个东西,并希望将其更改回最新状态。 我不确定这些是自纪元以来的滴答声还是秒数,但它们都产生了不正确的结果。 以下是我在 .net 中将其转换回来的代码,但结果很荒谬

Console.WriteLine(new DateTime(1970, 1, 1).AddTicks(1315565372414));

如果我尝试 AddSeconds;它会抛出值超出范围异常。

这是我序列化日期的方式:

[DataContract]
public class Test
{
    [DataMember]
    public DateTimeOffset blah { get; set; }
}

    var serializer = new DataContractJsonSerializer(typeof(Test));
    var writer = new StringWriter();
    serializer.WriteObject(new XmlTextWriter(writer), new Test() { blah = DateTimeOffset.Now });
    string output = writer.ToString();

    Console.WriteLine(output);

【问题讨论】:

    标签: c# .net asp.net wcf json


    【解决方案1】:

    它是自纪元以来的毫秒数。要反序列化它,我们需要执行以下操作:

    var date = new DateTime(1970, 1, 1).AddMilliseconds(1315565098519);
    var dateWithOffset = new DateTimeOffset(date, TimeSpan.FromMinutes(300));
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多