共用方式為


CA2238:請正確實作序列化方法

型別名稱

ImplementSerializationMethodsCorrectly

CheckId

CA2238

分類

Microsoft.Usage

中斷變更

中斷 - 如果可以在組件 (Assembly) 外部看見方法。

非中斷 - 如果不能在組件外部看見方法。

原因

處理序列化事件的方法沒有正確的簽章、傳回型別或可視性。

規則描述

套用下列其中一個序列化事件屬性 (Attribute),即可將序列化事件處理常式指定給方法:

序列化事件處理常式會採用型別 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:必須保護序列化建構函式