我用下面的類在兩個ASP.NET服務交換JSON數據:如何使用DataContractJsonSerializer序列化/反序列化存儲在對象字段內的DateTime?
[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)\/"}
如解釋here,DataContractJsonSerializer
支持多態性,在__type
屬性的幫助下。
我試圖在課程頂部添加[KnownType(typeof(DateTime))]
屬性,但它沒有幫助。
但是如果我設置了Tuple<DateTime>
內Value
屬性(類上的適當KnownType
屬性),它的工作原理(得當反序列化值):
Value = {(10/11/2016 10:49:30 AM)}
裏面JSON,__type
是emited
JSON = {
"Value": {
"__type" : "TupleOfdateTime:#System",
"m_Item1" : "\/Date(1476175770028+0200)\/"
}
}
有沒有辦法強制DataContractJsonSerializer
發出正確的信息來序列化/反序列化DateTime
正確(這意味着我得到了DateTime
序列化後,而不是一個字符串)?
我嘗試在DataContractJsonSerializerSettings
中設置EmitTypeInformation = EmitTypeInformation.Always
,但它沒有幫助。
可以修改'Filter'類? – dbc
是的,它可以改變。 – tigrou