다음을 통해 공유


CA2239: 선택적 필드에 deserialization 메서드를 제공하십시오.

TypeName

ProvideDeserializationMethodsForOptionalFields

CheckId

CA2239

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

형식에 OptionalFieldAttribute 특성으로 표시된 필드가 있으며 형식에서 deserialization 이벤트 처리 메서드를 제공하지 않습니다.

규칙 설명

OptionalFieldAttribute 특성은 serialization에 영향을 주지 않습니다. 이 특성으로 표시된 필드는 serialize됩니다.하지만 deserialization에서는 이 필드가 무시되어 해당 형식과 연관된 기본값을 유지합니다.deserialization 프로세스 도중 필드를 설정하려면 deserialization 이벤트 처리기를 선언해야 합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 형식에 deserialization 이벤트 처리 메서드를 추가합니다.

경고를 표시하지 않는 경우

deserialization 프로세스 도중 필드를 무시해야 하는 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다.

예제

다음 예제에서는 선택적 필드와 deserialization 이벤트 처리 메서드가 있는 형식을 보여 줍니다.

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을 올바르게 구현하십시오.

CA2229: serialization 생성자를 구현하십시오.

CA2238: serialization 메서드를 올바르게 구현하십시오.

CA2235: 모두 serialize할 수 없는 필드로 표시하십시오.

CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오.

CA2120: serialization 생성자를 안전하게 하십시오.