Как сериализовать / десериализовать DateTime, хранящийся внутри поля объекта, используя DataContractJsonSerializer?

Я использую следующий класс для обмена данными JSON через две службы ASP.NET:

[DataContract]
public class Filter
{
   [DataMember]
   public string Name {get; set;}

   [DataMember]
   public FilterOperator Operator {get; set;}

   [DataMember]
   public object Value {get; set;}    
}

Вот проблема: если я установлюDateTime внутриValue, он будет десериализован как строка:

Value = "/Date(1476174483233+0200)/"

Вероятно, это связано с тем, что десериализатор не имеет ни малейшего представления о том, какой тип значения был при сериализации изначально:

JSON = {"Value":"\/Date(1476174483233+0200)\/"}

Как объяснилВот, DataContractJsonSerializer поддерживает полиморфизм, с помощью__type имущество.

Я пытался добавить[KnownType(typeof(DateTime))] атрибут в верхней части класса, но это не помогает.

Однако, если я установлюTuple<DateTime> внутриValue собственность (и соответствующиеKnownType атрибута класса), он работает (значение десериализовано правильно):

Value = {(10/11/2016 10:49:30 AM)}

Внутри JSON,__type испускается

JSON = {
     "Value": {
        "__type" : "TupleOfdateTime:#System",
        "m_Item1" : "\/Date(1476175770028+0200)\/"
     }
}

Есть ли способ заставитьDataContractJsonSerializer испускать правильную информацию для сериализации / десериализацииDateTime правильно (что означает, что я получилDateTime после сериализации вместо строки)?

Я должен попытаться установитьEmitTypeInformation = EmitTypeInformation.Always вDataContractJsonSerializerSettings но это не помогает.

Ответы на вопрос(1)

Ваш ответ на вопрос