使用DataContractJsonSerializer反序列化json时如何使用带有List <t>的Activator.CreateInstance </t>

时间:2010-11-28 18:45:43

标签: json list windows-phone-7 activator deserialization

我正在反序列化这个json字符串:

[{"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的默认构造函数中,我为“_dtcreate”设置了默认值。

所以,我正在使用此代码将json反序列化为T:

数组
 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字符串时,评估了属性“_dtcreate”。

我认为DataContractJsonSerializer不使用MyClass的默认构造函数。

我可以使用

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

为属于数组“gType”的所有对象创建一个实例,以确保我的列表的所有对象都是使用我的T类的dafault构造函数创建的?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

DataContract序列化程序不会运行构造函数。

相反,您应该将您的逻辑放入an [OnDeserializing] method