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

“值”
RuleId CA2239
Category Microsoft.Usage
重大更改 非中断

原因

某个类型有一个使用 System.Runtime.Serialization.OptionalFieldAttribute 属性标记的字段,并且该类型没有提供反序列化事件处理方法。

规则说明

OptionalFieldAttribute 属性对序列化没有影响;用属性标记的字段被序列化。 但是,在反序列化时将忽略该字段,并保留与其类型关联的默认值。 应在反序列化过程中声明反序列化事件处理程序以设置字段。

如何解决冲突

若要解决与此规则的冲突,请将反序列化事件处理方法添加到该类型。

何时禁止显示警告

如果应该在反序列化过程中忽略该字段,则可以安全地抑制此规则发出的警告。

示例

下面的示例演示一个具有可选字段和反序列化事件处理方法的类型。

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

CA2229:实现序列化构造函数

CA2238:正确实现序列化方法

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

CA2237:用 SerializableAttribute 标记 ISerializable 类型

CA2120:保护序列化构造函数