是否有一种方法可以覆盖DataContractJsonSerializer序列化日期的方式?

本文关键字:序列化 DataContractJsonSerializer 覆盖 日期 方式 方法 一种 是否 | 更新日期: 2023-09-27 18:10:37

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

当前,它会将日期转换为如下格式:

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

我宁愿把它序列化为utc 1970以来的毫秒数。这样,其他语言就可以很容易地处理json数据。

是否有一种方法可以覆盖DataContractJsonSerializer序列化日期的方式?

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

这里有一个解决方法http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx在主题"对原语的序列化格式的细粒度控制"下描述。

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

可能是DataContractJsonSerializerSettings。DateTimeFormat可能会有帮助