Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 336
Jim Geurts Avatar asked Oct 06 '11 00:10

Jim Geurts


2 Answers

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.

like image 62
carlosfigueira Avatar answered Oct 14 '22 17:10

carlosfigueira


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.

like image 32
falkse Avatar answered Oct 14 '22 16:10

falkse