كيفية استخدام Activator.CreateInstance مع قائمة عند Deserialize JSON مع DatacontractJsonserializer
-
29-09-2019 - |
سؤال
أنا أخرج سلسلة 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؟
شكراً جزيلاً!
المحلول
لن يقوم DataContract Serializers بتشغيل منشئات.
بدلاً من ذلك ، يجب عليك وضع منطقك و [OnDeserializing]
طريقة.
لا تنتمي إلى StackOverflow