Как сериализовать / десериализовать 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
но это не помогает.