Правильно реализовывать методы сериализации
Обновлен: Ноябрь 2007
TypeName |
ImplementSerializationMethodsCorrectly |
CheckId |
CA2238 |
Категория |
Microsoft.Usage |
Критическое изменение |
Критическое, если метод отображается за пределами сборки. Не критическое, если метод не отображается за пределами сборки. |
Причина
Метод, обрабатывающий событие сериализации, не имеет правильной подписи, возвращаемого типа или отображения.
Описание правила
Метод назначается обработчику событий сериализации путем применения одного из следующих атрибутов события сериализации.
Обработчики событий сериализации принимают один параметр типа System.Runtime.Serialization.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) {}
}
}
Связанные правила
Вызывайте методы базового класса для типов ISerializable
Правильно реализуйте ISerializable
Применяйте конструкторы сериализации
Помечайте все несериализуемые поля
Помечайте типы ISerializable атрибутом SerializableAttribute
Предоставляйте методы десериализации для необязательных полей