Share via


CA2238:正确实现序列化方法

类型名

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) {}
   }
}

相关规则

CA2236:对 ISerializable 类型调用基类方法

CA2240:正确实现 ISerializable

CA2229:实现序列化构造函数

CA2235:标记所有不可序列化的字段

CA2237:以 SerializableAttribute 标记 ISerializable 类型

CA2239:为可选字段提供反序列化方法

CA2120:保护序列化构造函数