ما الفرق بين استخدام السمة المسلسل وتنفيذ غير قابلة للتطبيق؟

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

سؤال

ما الفرق بين استخدام Serializable تنسب وتنفيذ ISerializable واجهه المستخدم؟

هل كانت مفيدة؟

المحلول

عندما تستخدم SerializableAttribute السمة التي تضعها سمة على حقل في وقت الترجمة بطريقة في وقت التشغيل ، ستعرف المنشآت المتسلسل ما يجب أن تتصرف بناءً على السمات من خلال أداء الانعكاس على نوع الفئة/الوحدة/التجميع.

[Serializable]
public class MyFoo { … }

ما سبق يشير إلى أن المنشأة التسلسلية يجب أن يقوم بتسلسل الفئة بأكملها MyFoo, ، بينما:

public class MyFoo
{
    private int bar;

    [Serializable]
    public int WhatBar
    {
       get { return this.bar; }
    }
}

باستخدام السمة ، يمكنك اختيار الحقول بشكل انتقائي التي يجب تسلسلها.

عند تنفيذ ISerializable واجهه المستخدم, ، يتم تجاوز التسلسل بشكل فعال مع إصدار مخصص ، عن طريق تجاوز GetObjectData و SetObjectData (ومن خلال توفير مُنشئ للنموذج MyFoo(SerializationInfo info, StreamingContext context)) ، سيكون هناك درجة الدقيقة من السيطرة على تسلسل البيانات.

أنظر أيضا هذا المثال للتسلسل المخصص هنا على stackoverflow. إنه يوضح كيفية الحفاظ على التسلسل متوافقًا مع الإصدارات المختلفة من البيانات المختلفة.

أتمنى أن يساعدك هذا.

نصائح أخرى

ال SerializableAttribute يرشد الإطار للقيام بعملية التسلسل الافتراضي. إذا كنت بحاجة إلى مزيد من التحكم ، يمكنك تنفيذ واجهة iserializable. ثم يمكنك وضع الكود الخاص بك لتسلسل الكائن في GetObjectData الطريقة وتحديث SerializationInfo كائن يتم تمريره إليه.

ال ISerializable الواجهة تتيح لك التنفيذ التسلسل المخصص بخلاف الافتراضي. عند تنفيذ ISerializable الواجهة ، عليك تجاوز GetObjectData الطريقة على النحو التالي

public void GetObjectData (SerializationInfo serInfo, 
                                    StreamingContext streamContext)
{
   // Implement custom Serialization
}

يجبرك iSerialize على تنفيذ منطق التسلسل سليًا ، في حين أن وضع علامة على السمة القابلة للتسلسل (هل كنت تقصد ذلك؟) سيخبر المسلسل الثنائي أن هذه الفئة يمكن تسلسلها. سوف تفعل ذلك تلقائيا.

يتيح لك الوراثة من iserializable تنفيذ التسلسل (DE) المخصص. عند استخدام السمة المتسلسلة فقط ، لا يمكن التحكم في تسلسل (DE) إلا عن طريق السمات وأقل مرونة.

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