CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오.
속성 | 값 |
---|---|
규칙 ID | CA2237 |
제목 | SerializableAttribute로 ISerializable 형식 표시 |
범주 | 사용 현황 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 아니요 |
원인
외부에 표시되는 형식이 System.Runtime.Serialization.ISerializable 인터페이스를 구현하고 형식이 System.SerializableAttribute 특성으로 표시되지 않습니다. 규칙은 기본 형식이 직렬화 가능하지 않은 파생 형식을 무시합니다.
규칙 설명
공용 언어 런타임에서 직렬화가 가능하다고 인식되려면 형식이 ISerializable 인터페이스 구현을 통해 사용자 지정 serialization 루틴을 사용하는 경우에도 SerializableAttribute 특성을 사용하여 형식을 표시해야 합니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 형식에 SerializableAttribute 특성을 적용합니다.
경고를 표시하지 않는 경우
애플리케이션 도메인에서 올바르게 작동하려면 직렬화할 수 있어야 하므로 예외 클래스에 대한 이 규칙의 경고를 표시하지 마세요.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#pragma warning disable CA2237
// The code that's violating the rule is on this line.
#pragma warning restore CA2237
파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none
으로 설정합니다.
[*.{cs,vb}]
dotnet_diagnostic.CA2237.severity = none
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
예시
다음 예제에서는 규칙을 위반하는 형식을 보여 줍니다. 규칙을 충족하려면 SerializableAttribute 특성 줄의 주석 처리를 제거합니다.
Imports System.Runtime.Serialization
Namespace ca2237
' <SerializableAttribute> _
Public Class BaseType
Implements ISerializable
Dim baseValue As Integer
Sub New()
baseValue = 3
End Sub
Protected Sub New(
info As SerializationInfo, context As StreamingContext)
baseValue = info.GetInt32("baseValue")
End Sub
Overridable Sub GetObjectData(
info As SerializationInfo, context As StreamingContext) Implements ISerializable.GetObjectData
info.AddValue("baseValue", baseValue)
End Sub
End Class
End Namespace
// [SerializableAttribute]
public class BaseType : ISerializable
{
int baseValue;
public BaseType()
{
baseValue = 3;
}
protected BaseType(
SerializationInfo info, StreamingContext context)
{
baseValue = info.GetInt32("baseValue");
}
public virtual void GetObjectData(
SerializationInfo info, StreamingContext context)
{
info.AddValue("baseValue", baseValue);
}
}
관련 규칙
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET