CA2235: 모두 serialize할 수 없는 필드로 표시하십시오.
TypeName |
MarkAllNonSerializableFields |
CheckId |
CA2235 |
범주 |
Microsoft.Usage |
변경 수준 |
주요 변경 아님 |
원인
serialize할 수 없는 형식의 인스턴스 필드가 serialize할 수 있는 형식에 정의되었습니다.
규칙 설명
serialize할 수 있는 형식은 System.SerializableAttribute 특성으로 표시된 형식입니다. 형식이 serialize될 때 형식에 serialize할 수 없는 형식의 인스턴스 필드가 있으면 System.Runtime.Serialization.SerializationException 예외가 throw됩니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 serialize할 수 없는 필드에 System.NonSerializedAttribute 특성을 적용합니다.
경고를 표시하지 않는 경우
필드의 인스턴스를 serialize 및 deserialize할 수 있도록 허용하는 System.Runtime.Serialization.ISerializationSurrogate 형식이 선언된 경우에만 이 규칙에서 경고를 표시하지 않습니다.
예제
다음 예제에서는 이 규칙을 위반하는 형식과 이 규칙을 충족하는 형식을 보여 줍니다.
Imports System
Imports System.Runtime.Serialization
Namespace UsageLibrary
Public Class Mouse
Dim buttons As Integer
Dim scanTypeValue As String
ReadOnly Property NumberOfButtons As Integer
Get
Return buttons
End Get
End Property
ReadOnly Property ScanType As String
Get
Return scanTypeValue
End Get
End Property
Sub New(numberOfButtons As Integer, scanType As String)
buttons = numberOfButtons
scanTypeValue = scanType
End Sub
End Class
<SerializableAttribute> _
Public Class InputDevices1
' Violates MarkAllNonSerializableFields.
Dim opticalMouse As Mouse
Sub New()
opticalMouse = New Mouse(5, "optical")
End Sub
End Class
<SerializableAttribute> _
Public Class InputDevices2
' Satisfies MarkAllNonSerializableFields.
<NonSerializedAttribute> _
Dim opticalMouse As Mouse
Sub New()
opticalMouse = New Mouse(5, "optical")
End Sub
End Class
End Namespace
using System;
using System.Runtime.Serialization;
namespace UsageLibrary
{
public class Mouse
{
int buttons;
string scanTypeValue;
public int NumberOfButtons
{
get { return buttons; }
}
public string ScanType
{
get { return scanTypeValue; }
}
public Mouse(int numberOfButtons, string scanType)
{
buttons = numberOfButtons;
scanTypeValue = scanType;
}
}
[SerializableAttribute]
public class InputDevices1
{
// Violates MarkAllNonSerializableFields.
Mouse opticalMouse;
public InputDevices1()
{
opticalMouse = new Mouse(5, "optical");
}
}
[SerializableAttribute]
public class InputDevices2
{
// Satisfies MarkAllNonSerializableFields.
[NonSerializedAttribute]
Mouse opticalMouse;
public InputDevices2()
{
opticalMouse = new Mouse(5, "optical");
}
}
}
관련 규칙
CA2236: ISerializable 형식에서 기본 클래스 메서드를 호출하십시오.
CA2240: ISerializable을 올바르게 구현하십시오.
CA2229: serialization 생성자를 구현하십시오.
CA2238: serialization 메서드를 올바르게 구현하십시오.
CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오.