2017-01-16 44 views
0

我有一個類型爲「object」的屬性的對象(需要具有通用代碼)。在對象類型屬性中強制反序列化DateTime

Public Property Valeur() As Object 

我DataContractJsonSerializer序列化,和我有這個:

  }, { 
      "Desc": "Date ouverture", 
      "Id": "DatOuverture", 
      "Mode": 0, 
      "Valeur": "\/Date(1482966000000+0100)\/" 
     }, { 

所以,當我反序列化,序列化投 「Valeur」 的字符串,而不是日期時間。

Valeur = "\/Date(1482966000000+0100)\/" 

我試着用「AlwaysTransmitTypeInformation」,但是沒有任何改變。 當我在serialise之前寫入屬性時,她很好地使用「DateTime」類型,而不是字符串。

有關信息,Valeur可以是與dateTime不同的類型。

有人有想法嗎?

注意。

+0

似乎序列化不能自動投射動態類型。 –

+0

時間看起來可能很長:DateTime time = DateTime.FromBinary(1482966000000); – jdweng

+0

這些只是有問題的日期,其他類型(即使是複雜的對象)也能正常工作。 – david

回答

0

你可以使用DataContractJsonSerializerSettings指定日期的格式時constructing your serializer object

public class Item 
{ 
    public object Value { get; set; } 
} 


class Program 
{ 
    static void Main() 
    { 
     var settings = new DataContractJsonSerializerSettings 
     { 
      DateTimeFormat = new DateTimeFormat("o"), 
     }; 
     var serializer = new DataContractJsonSerializer(typeof(Item), settings); 

     var item = new Item { Value = DateTime.UtcNow }; 
     serializer.WriteObject(Console.OpenStandardOutput(), item); 
    } 
} 

會連載:

{"Value":"2017-01-16T08:50:47.9127678Z"} 

正如你可以使用Json.NET,讓你更控制了系列化替代處理。

+0

您好Darin, 我使用DataContractJsonSerializer的另一個構造函數: DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T),null,int.MaxValue,false,dcs,AlwayEmitTypeInformation); ... 因此,DataContractJsonSerializerSettings參數不可訪問。 我在實例前尋找它,就像一個屬性集,但我找不到名爲「..Setting」的屬性。 – david

+0

您正在使用哪種版本的.NET框架?此設置可從.NET 4.5獲得。如果您使用的是舊版本的框架,那麼您運氣不好。我建議你切換到Json.NET。 –

+0

我在FrameWork 4.0上。此外,我試圖使用Json.Net,但我遇到了另一個問題,所有的對象都是JObject類型也許我沒有正確使用: 'Dim js As Newtonsoft.Json.Linq.JArray = Newtonsoft.Json.Linq.JArray .Parse(json) Dim ret As T = js.ToObject(Of T)() Return ret' – david

相關問題