Поделиться через


CA2238: следует правильно реализовывать методы сериализации

TypeName

ImplementSerializationMethodsCorrectly

CheckId

CA2238

Категория

Microsoft.Usage

Критическое изменение

Критическое, если метод отображается за пределами сборки.

Не критическое, если метод не отображается за пределами сборки.

Причина

Метод, обрабатывающий событие сериализации, не имеет правильной сигнатуры, возвращаемого типа или отображения.

Описание правила

Метод назначается обработчику событий сериализации путем применения одного из следующих атрибутов события сериализации.

Обработчики событий сериализации принимают один параметр типа StreamingContext, возвращают void и имеют отображение private.

Устранение нарушений

Чтобы устранить нарушение данного правила, исправьте подпись, возвращаемый тип или отображение обработчика событий сриализации.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показано правильное объявление обработчиков событий сериализации.

Imports System
Imports System.Runtime.Serialization

Namespace UsageLibrary

   <SerializableAttribute> _ 
   Public Class SerializationEventHandlers

      <OnSerializingAttribute> _ 
      Private Sub OnSerializing(context As StreamingContext) 
      End Sub

      <OnSerializedAttribute> _ 
      Private Sub OnSerialized(context As StreamingContext) 
      End Sub

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

      <OnDeserializedAttribute> _ 
      Private Sub OnDeserialized(context As StreamingContext)
      End Sub 

   End Class 

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

namespace UsageLibrary
{
   [SerializableAttribute]
   public class SerializationEventHandlers
   {
      [OnSerializingAttribute]
      void OnSerializing(StreamingContext context) {}

      [OnSerializedAttribute]
      void OnSerialized(StreamingContext context) {}

      [OnDeserializingAttribute]
      void OnDeserializing(StreamingContext context) {}

      [OnDeserializedAttribute]
      void OnDeserialized(StreamingContext context) {}
   }
}

Связанные правила

CA2236: вызывайте методы базового класса для типов ISerializable

CA2240: правильно реализуйте ISerializable

CA2229: применяйте конструкторы сериализации

CA2235: помечайте все несериализуемые поля

CA2237: пометьте типы ISerializable атрибутом SerializableAttribute

CA2239: предоставляйте методы десериализации для необязательных полей

CA2120: обеспечьте безопасность конструкторов сериализации