CA2239:为可选字段提供反序列化方法
类型名 |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
类别 |
Microsoft.Usage |
是否重大更改 |
否 |
原因
类型有一个使用 System.Runtime.Serialization.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 类型调用基类方法