Search code examples
c#openrasta

DataContractJsonSerializer Date Serialization


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 want to convert it into human readable date format.

I am building a RestApi using openrasta framework. Can i write OperationInterceptors which will at some stage before serialization/deserialization convert JSON datetime format to something which is human readable?Or is there any other way to do it?


Solution

  • Finally i have handled this issue as below(c#)

        [DataMember]
        public string Date { get; set; }
    
        [IgnoreDataMember]
        public DateTime? DateForInternalUse { get; set; }
    
        [OnSerializing]
        public void OnSerializing(StreamingContext context)
        {
          Date = (DateForInternalUse != null) ? ((DateTime)DateForInternalUse).ToString(DateTimeFormatForSerialization) : null;
        }
    
        [OnDeserialized]
        public void OnDeserialized(StreamingContext context)
        {
          try
          {
            DateForInternalUse = !String.IsNullOrEmpty(Date) ? DateTime.ParseExact(Date, DateTimeFormats, null, DateTimeStyles.None) : (DateTime?)null;
          }
          catch (FormatException)
          {
            DateForInternalUse = null;
          }
        }
    

    In this case we can specify the formats which we want to support which i have kept inside web.config

    <add key="DateTimePattern" value="yyyy-MM-dd,yyyy-MM-dd hh:mm:ss zzz,yyyy-MM-dd hh:mm:ss" />
    

    Let me know for further clarifications.