Aracılığıyla paylaş


CA2237: ISerializable türleri SerializableAttribute ile işaretleyin

TypeName

MarkISerializableTypesWithSerializable

CheckId

CA2237

Kategori

Microsoft.Usage

Değişiklik kesiliyor

Olmayan bölme

Neden

Dışarıdan görünen bir tür uygulayan ISerializable arabirimi ve türü işaretlenmemiş ile SerializableAttribute özniteliği.Kural temel türü seri hale getirilebilir değil türetilen türler yok sayar.

Kural Tanımı

Ortak dil çalışma zamanı tarafından seri hale getirilebilir olarak tanınması için türleri ile işaretlenmesi gereken SerializableAttribute öznitelik türü özel seri hale getirme yordamı uygulaması aracılığıyla kullanıyor olsa bile ISerializable arabirimi.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltme uygulamak SerializableAttribute öznitelik türü.

Uyarıları ne zaman

Uygulama etki alanları arasında düzgün çalışması için seri hale getirilebilir gerektiğinden bu kuraldan istisna sınıfları için bir uyarı bastırmak değil.

Örnek

Aşağıdaki örnek, kuralını ihlal eden bir türü gösterilir.Yorumsuz SerializableAttribute kural karşılamak için satırı özniteliği.

Imports System
Imports System.Runtime.Serialization
Imports System.Security.Permissions

Namespace UsageLibrary

   ' <SerializableAttribute> _  
   Public Class BaseType
      Implements ISerializable

      Dim baseValue As Integer 

      Sub New()
         baseValue = 3
      End Sub 

      Protected Sub New( _ 
         info As SerializationInfo, context As StreamingContext)

         baseValue = info.GetInt32("baseValue")

      End Sub

      <SecurityPermissionAttribute(SecurityAction.Demand, _ 
          SerializationFormatter := True)> _ 
      Overridable Sub GetObjectData( _ 
         info As SerializationInfo, context As StreamingContext) _ 
         Implements ISerializable.GetObjectData

         info.AddValue("baseValue", baseValue)

      End Sub 

   End Class 

End Namespace
using System;
using System.Runtime.Serialization;
using System.Security.Permissions;

namespace UsageLibrary
{
   // [SerializableAttribute] 
   public class BaseType : ISerializable
   {
      int baseValue;

      public BaseType()
      {
         baseValue = 3;
      }

      protected BaseType(
         SerializationInfo info, StreamingContext context)
      {
         baseValue = info.GetInt32("baseValue");
      }

      [SecurityPermissionAttribute(SecurityAction.Demand, 
          SerializationFormatter = true)]
      public virtual void GetObjectData(
         SerializationInfo info, StreamingContext context)
      {
         info.AddValue("baseValue", baseValue);
      }
   }
}

İlgili kuralları

CA2236: ISerializable türler üzerinde taban sınıf yöntemlerini çağırın

CA2240: ISerializable'ı doğru uygulayın

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

CA2238: Serileştirme yöntemlerini doğru uygulama

CA2235: Tüm serileştirilebilir olmayan alanları işaretleyin

CA2239: İsteğe bağlı yöntemler için serileştirme kaldırma yöntemler sağlayın

CA2120: Serileştirme oluşturucularının güvenliğini sağlayın