[C#] XML 문서를 생성하는 동안 오류가 발생했습니다. XmlSerializer 상속 직렬화 오류, XmlInclude로 해결하기

C#에서 상속 관계를 가진 클래스를 XML로 직렬화할 때 발생하는 "정적으로 알려지지 않은 형식" 오류의 원인과 해결 방법을 정리해보겠습니다~

발생 오류 ⚠️

코드 실행 중 다음과 같은 예외가 발생할 때 이 방법을 사용합니다.

  • 에러 메시지: XML 문서를 생성하는 동안 오류가 발생했습니다.
  • 상세 메시지 (InnerException): typeName 형식은 사용할 수 없습니다. XmlInclude 또는 SoapInclude 특성을 사용하여 정적으로 알려지지 않은 형식을 지정하십시오.

해결 방법 ✅

부모 클래스 선언부 상단에 [XmlInclude(typeof(자식클래스))]를 추가하면 바로 해결할 수 있어요!

[XmlRoot("Rootname")]
[XmlInclude(typeof(ChildClassName))] // 해결 방법: 자식 클래스 타입을 미리 등록하세요.
public class ParentClassName
{
    [XmlAttribute("id")]
    public string Id { get; set; }
    // ...공통 필드
}

// 상속받은 자식 클래스
public class ChildClassName : ParentClassName { ... }

오류 원인 🔍

XmlSerializer는 기본적으로 부모 클래스(ParentClassName)만 인식하도록 설계되어 있습니다. 하지만 실제 데이터로 자식 클래스(ChildClassName) 인스턴스가 들어오면, Serializer는 "배운 적 없는 타입"이라며 보안 및 구조적 이유로 직렬화를 중단하기 때문이에요. 그리하여 XmlInclude 어트리뷰트를 통해 파생 클래스에서 형식 인식을 허용하도록 하는 것이지요.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗