开发者

Is there a way to override how DataContractJsonSerializer serializes Dates?

Is there a way to change how the DataContractJsonSerializer serializes dates?

Currently, it'll convert a date to something like:

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

I would 开发者_如何学编程rather have it serialize as just the milliseconds since utc 1970. That way, other languages can easily work with the json data.


No, there's no hook in the serializer itself to do that. But you can use some of the serialization callbacks to implement this same behavior. You'd create another data member (of type string), and before the data is serialized, an [OnSerializing] callback would be invoked to copy the value of the DateTime field to the string one. The section "Fine-grained control of serialization format for primitives" in the post about serialization surrogates (at http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx) shows more details of what needs to be done.


Well there is a workaround described here http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx under the topic "Fine-grained control of serialization format for primitives".

The main idea is to use a string backing field for the unserialized values and a property which performs serialzation and deserialzation in the setter and getter. That´s not ideal from the performance view but it could be a solution in some situations.


Perhaps the DataContractJsonSerializerSettings.DateTimeFormat may be helpful

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜