CA2239: オプションのフィールドに逆シリアル化メソッドを指定します
TypeName |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
分類 |
Microsoft.Usage |
互換性に影響する変更点 |
なし |
原因
型に OptionalFieldAttribute 属性マークされているフィールドがあり、その型に逆シリアル化のイベント ハンドラー メソッドがありません。
規則の説明
OptionalFieldAttribute 属性はシリアル化に何も影響を及ぼしません。この属性でマークされたフィールドはシリアル化されます。ただし、逆シリアル化の場合、フィールドは無視され、その型に関連付けられた既定値を保持します。逆シリアル化プロセス時にフィールドを設定するには、逆シリアル化のイベント ハンドラーを宣言します。
違反の修正方法
この規則違反を修正するには、型に逆シリアル化のイベント ハンドラー メソッドを追加します。
警告を抑制する状況
逆シリアル化プロセスでこのフィールドが無視される場合は、この規則による警告を抑制しても安全です。
使用例
オプションのフィールドと逆シリアル化のイベント ハンドラー メソッドのある型を、次の例に示します。
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.
}
}
}
関連規則
CA2236: ISerializable 型で基本クラス メソッドを呼び出します
CA2240: ISerializable を正しく実装します
CA2235: すべてのシリアル化不可能なフィールドを設定します