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