如何读取由DataContractJsonSerializer序列化的DateTimeOffset

时间:2011-09-09 10:53:40

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

我使用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);

1 个答案:

答案 0 :(得分:3)

这是自纪元以来的毫秒数。要反序列化,我们需要做以下事情:

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

参考文献: