CA2239:必須為選擇性欄位提供還原序列化方法
型別名稱 |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
分類 |
Microsoft.Usage |
中斷變更 |
不中斷 |
原因
型別具有以 System.Runtime.Serialization.OptionalFieldAttribute 屬性 (Attribute) 標示的欄位,而且型別不提供還原序列化 (Deserialization) 事件處理方法。
規則描述
OptionalFieldAttribute 屬性對於序列化 (Serialization) 沒有作用,而以屬性標示的欄位會序列化。 然而,在還原序列化時會忽略欄位,而且這個欄位會保留與型別相關聯的預設值。 還原序列化事件處理常式應該宣告為在還原序列化處理期間設定欄位。
如何修正違規
若要修正此規則的違規情形,請將還原序列化事件處理方法加入至型別。
隱藏警告的時機
如果在還原序列化處理期間應該忽略欄位,則您可以放心地隱藏這項規則的警告。
範例
下列範例會顯示含選擇性欄位的型別和還原序列化事件處理方法。
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 型別上的基底類別方法