2010-11-28 78 views
0

我這個反序列化JSON字符串:如何使用Activator.CreateInstance與列表<T>當反序列化JSON與DataContractJsonSerializer

[{"id":"1"},{"id":"2"},{"id":"3"}] 

代表項目的類是:

[DataContract] 
public class MyClass 
{ 

     public MyClass() { 
      this._dtcreate = new DateTime(); 
     } 

     private int _id; 
     [DataMember(Name = "id")] 
     public int Id {get;set;} 

     private DateTime _dtcreate; 
} 

注意,在MyClass的默認構造函數I爲「_dtcreate」設置了默認值。當我反序列化JSON字符串我在反序列化數組沒有找到該屬性「_dtcreate」 evalued

public static T[] DeserializeArray<T>(string json) 
    { 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[])); 
     MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); 
     T[] gType = (T[])ser.ReadObject(ms); 
     return gType; 
    } 

所以,我用這個代碼進行反序列化JSON轉換成T的數組。

我認爲DataContractJsonSerializer不使用MyClass的默認構造函數。

我可以使用

T obj = Activator.CreateInstance<T>(); 

創造屬於數組「G-類」的所有對象的實例,使我保證deserialiced我的列表中的所有對象與我的T艙的dafault構造函數創建?

非常感謝!

+0

`DateTime`是一個結構體。你的構造函數完全沒用。 – SLaks 2010-11-28 19:08:55

回答

1

DataContract序列化程序不會運行構造函數。

相反,你應該把你的邏輯放到an [OnDeserializing] method

+0

謝謝!我設置this._dtcreate = new DateTime();在OnDeserializedMethod和工作正常.. – 2010-11-28 19:14:55

相關問題