CA2229: Implement serialization constructors

TypeName

ImplementSerializationConstructors

CheckId

ca2229

Category

Microsoft.Usage

تعطيل تغيير

غير فاصلة

السبب

بتطبيق النوع System.Runtime.Serialization.ISerializableالواجهة، هو غير مفوض أو الواجهة ومن الحالات التالية هو صحيحاً:

  • نوع لا يحتوي على الدالة الإنشائية تأخذ System.Runtime.Serialization.SerializationInfoالكائن System.Runtime.Serialization.StreamingContextالكائن (توقيع مؤسس إنشاء تسلسل).

  • النوع unsealed ومُعدل الوصول للسلسلة الخاصة به الدالة الإنشائية غير المحمية (مجموعة).

  • النوع هو مختوم ومُعدل الوصول المنشئ الخاص به إنشاء تسلسل هو غير خاصة.

وصف القاعدة

Th هو قاعدة هو ذات الصلة للأنواع التي تعتمد السلسلة المخصصة. يعتمد نوع مخصص إنشاء تسلسل إذا كان يطبق في ISerializableالواجهة. الدالة الإنشائية سلسلة هو اللازمة لإلغاء تسلسل أو إعادة إنشاء الكائنات تسلسل باستخدام ISerializable.GetObjectDataالأسلوب.

كيف إلى الإصلاح انتهاكات

لإصلاح انتهاكا لهذه قاعدة، تطبق في إنشاء تسلسل الدالة الإنشائية. لفئة متصفح المدونة، تأكد الدالة الإنشائية خاصة؛ وإلا، تجعل من حماية.

عند إلى منع التحذيرات

لا بمنع مخالفة قاعدة. النوع سيتم لا deserializable، ولن دالة في العديد من السيناريوهات.

مثال

يظهر المثال التالي هو نوع من يفي بالقاعدة.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;

namespace UsageLibrary 
{   
    [Serializable]
    public class SerializationConstructorsRequired : ISerializable 
    {
        private  int n1;

        // This is a regular constructor.
        public SerializationConstructorsRequired ()
        {
            n1 = -1;
        }
        // This is the serialization constructor.
        // Satisfies rule: ImplementSerializationConstructors.

        protected SerializationConstructorsRequired(
           SerializationInfo info, 
           StreamingContext context)
        {
            n1 = (int) info.GetValue("n1", typeof(int));
        }

        // The following method serializes the instance.
        [SecurityPermission(SecurityAction.LinkDemand, 
            Flags=SecurityPermissionFlag.SerializationFormatter)]
        void ISerializable.GetObjectData(SerializationInfo info, 
           StreamingContext context)
        {
            info.AddValue("n1", n1);
        }
    }
}

القواعد ذات الصلة

CA2237: Mark ISerializable types with SerializableAttribute

راجع أيضًا:

المرجع

System.Runtime.Serialization.ISerializable

System.Runtime.Serialization.SerializationInfo

System.Runtime.Serialization.StreamingContext