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

Posted

技术标签:

【中文标题】有没有办法覆盖 DataContractJsonSerializer 如何序列化日期?【英文标题】:Is there a way to override how DataContractJsonSerializer serializes Dates? 【发布时间】:2011-12-01 22:04:02 【问题描述】:

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

目前,它将日期转换为:


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

我宁愿将它序列化为自 UTC 1970 以来的毫秒数。这样,​​其他语言可以轻松处理 json 数据。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

也许 DataContractJsonSerializerSettings.DateTimeFormat 可能会有所帮助

【讨论】:

以上是关于有没有办法覆盖 DataContractJsonSerializer 如何序列化日期?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法覆盖 dbt Cloud CI 运行的模式名称?

有没有办法只用 CSS 覆盖自动缩放图像?

有没有办法覆盖模板中的表单值?

有没有办法可以检测文本而不覆盖它?

有没有办法阻止顺风覆盖降价默认间距?

有没有办法覆盖本机加速键?