2010-11-28 79 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

相关问题