كيفية استخدام Activator.CreateInstance مع قائمة عند Deserialize JSON مع DatacontractJsonserializer

StackOverflow https://stackoverflow.com/questions/4298377

سؤال

أنا أخرج سلسلة 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] طريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top