2013-02-01 4 views
4

Есть ли способ изменить, как DataContractJsonSerializer сериализует даты?DataContractJsonSerializer Дата Серийная сортировка

В настоящее время, он будет преобразовать дату к чему-то вроде:

{ "дата": "/ Дата (1260597600000-0600) /" }

Я хочу, чтобы преобразовать его в человеческий читаемый Формат даты.

Я создаю RestApi, используя инфраструктуру openrasta. Могу ли я написать OperationInterceptors, который на какой-то стадии, прежде чем сериализация/десериализация преобразует формат даты и времени JSON в нечто, доступное для человека? Или есть ли другой способ сделать это?

ответ

0

Наконец я регулировал эту проблему, как показано ниже (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; 
     } 
    } 

В этом случае можно указать форматы, которые мы хотим поддерживать, которые я держал в web.config

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

Дайте мне знать для дальнейших разъяснений.

1

Используйте DataContractJsonSerializer конструктор передать параметры сериализации:

var s = new DataContractJsonSerializer(
      typeof(YourTypeToSerialize), 
      new DataContractJsonSerializerSettings 
      { 
       DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss") 
      } 
     ); 
Смежные вопросы