有没有办法覆盖DataContractJsonSerializer如何序列化日期?

时间:2011-10-06 00:08:00

标签: c# json datacontractserializer

有没有办法改变DataContractJsonSerializer序列化日期的方式?

目前,它会将日期转换为:

{
  "date": "/Date(1260597600000-0600)/"
}

我宁愿让它序列化为自1970年以来的毫秒。这样,其他语言可以很容易地使用json数据。

3 个答案:

答案 0 :(得分:9)

不,序列化程序本身没有钩子可以做到这一点。但是您可以使用某些序列化回调来实现相同的行为。您将创建另一个数据成员(类型为字符串),在序列化数据之前,将调用[OnSerializing]回调以将DateTime字段的值复制到字符串1。关于序列化代理(http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx)的帖子中“基元的序列化格式的细粒度控制”部分显示了需要做什么的更多细节。

答案 1 :(得分:0)

这里有一个解决方法http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx,主题是“基元序列化格式的细粒度控制”。

主要思想是对未序列化的值使用字符串支持字段,以及在setter和getter中执行序列化和反序列化的属性。从性能角度来看,这并不理想,但在某些情况下它可能是一种解决方案。

答案 2 :(得分:0)

也许DataContractJsonSerializerSettings.DateTimeFormat可能有用