Aracılığıyla paylaş


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

TürAdı

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

Kategori

Microsoft.Usage

Bozan Değişiklik

Bozmayan

Sebep

Bir tür, OptionalFieldAttribute niteliği ile işaretlenmiş alana sahiptir ve tür, serileştirmenin kaldırılması olay işleme yöntemlerini sağlamaz.

Kural Tanımı

Bir OptionalFieldAttribute özniteliği; serileştirme üzerinde etkili değildir, alan serileştirilmiş bir özenitelik ile işaretlenmiştir.Ancak alan, serileştirmenin kaldırılması üzerinde yoksayılır ve kendi türüyle ilişkili varsayılan değerini korur.Serileştirmenin kaldırılması olay işleyicileri, serileştirmenin kaldırılması işlemi sırasında alanı ayarlamak için bildirilmelidir.

İhlallerin Düzeltilmesi

Bu kuralın ihlalini düzeltmek için türe, serileştirmenin kaldırılması olay işleme yöntemlerini ekleyin.

Uyarılar Ne Zaman Bastırılmalı

Eğer alan, serileştirmenin kaldırılması işlemi sırasında yoksayılıyorsa, bu kuraldaki bir uyarıyı bastırmak güvenlidir.

Örnek

Aşağıdaki örnek; isteğe bağlı bir türü ve serileştirmenin kaldırılması olay işleme yöntemlerini gösterir.

Imports System
Imports System.Reflection
Imports System.Runtime.Serialization

<Assembly: AssemblyVersionAttribute("2.0.0.0")>
Namespace UsageLibrary

   <SerializableAttribute> _ 
   Public Class SerializationEventHandlers

      <OptionalFieldAttribute(VersionAdded := 2)> _ 
      Dim optionalField As Integer = 5

      <OnDeserializingAttribute> _ 
      Private Sub OnDeserializing(context As StreamingContext)
         optionalField = 5
      End Sub

      <OnDeserializedAttribute> _ 
      Private Sub OnDeserialized(context As StreamingContext)
         ' Set optionalField if dependent on other deserialized values. 
      End Sub 

   End Class 

End Namespace
using System;
using System.Reflection;
using System.Runtime.Serialization;

[assembly: AssemblyVersionAttribute("2.0.0.0")]
namespace UsageLibrary
{
   [SerializableAttribute]
   public class SerializationEventHandlers
   {
      [OptionalFieldAttribute(VersionAdded = 2)]
      int optionalField = 5;

      [OnDeserializingAttribute]
      void OnDeserializing(StreamingContext context)
      {
         optionalField = 5;
      }

      [OnDeserializedAttribute]
      void OnDeserialized(StreamingContext context)
      {
         // Set optionalField if dependent on other deserialized values.
      }
   }
}

İ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

CA2237: ISerializable türleri SerializableAttribute ile işaretleyin

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