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