Aracılığıyla paylaş


CA2229: Serileştirme oluşturucularını uygulayın

TypeName

ImplementSerializationConstructors

CheckId

CA2229

Kategori

Microsoft.Usage

Değişiklik kesiliyor

Olmayan bölme

Neden

Türünü uygulayan ISerializable arabirim, bir temsilci veya arabirimi ve aşağıdaki koşullardan biri doğruysa:

  • Tür götüren bir oluşturucuya sahip değil bir SerializationInfo nesnesi ve bir StreamingContext nesne (seri hale getirme yapıcı imza).

  • Ağzı açık türüdür ve seri hale getirme kurucusu için erişim değiştiricisi korumalı (Aile) değil.

  • Tür korumalı ve seri hale getirme kurucusu için erişim değiştiricisi özel değildir.

Kural Tanımı

Bu kuralın özel seri hale getirme destekleyen türleri için geçerlidir.Bunu uygulayan özel seri hale getirme türü desteklediği ISerializable arabirimi.Seri hale getirme yapıcı serisini veya kullanarak serileştirilmiş nesneler yeniden gerekli ISerializable.GetObjectData yöntemi.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için seri hale getirme yapıcı uygular.Kapalı bir sınıf oluşturucu özel yapmak; Aksi halde, korumalı olun.

Uyarıları ne zaman

Kuralı ihlal engelleme.Tür deserializable olmayacak ve birçok senaryoda çalışmayacaktır.

Örnek

Aşağıdaki örnek, kural karşılayan bir türü gösterilir.

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);
        }
    }
}

İlgili kuralları

CA2237: ISerializable türleri SerializableAttribute ile işaretleyin

Ayrıca bkz.

Başvuru

ISerializable

SerializationInfo

StreamingContext