>백엔드 개발 >C++ >XmlSerializer를 사용하여 일반 목록 내에서 파생 클래스를 직렬화하는 방법은 무엇입니까?

XmlSerializer를 사용하여 일반 목록 내에서 파생 클래스를 직렬화하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-11 10:42:45533검색

How to Serialize Derived Classes within Generic Lists using XmlSerializer?

XmlSerializer를 사용하여 파생 클래스 직렬화

XmlSerializer를 사용하여 추상 클래스 파생 클래스의 일반 목록이 포함된 개체를 직렬화하는 경우 역직렬화 프로세스 중에 InvalidOperationException 예외가 발생할 수 있습니다. 이 문제를 해결하려면 파생 개체의 직렬화를 처리하기 위한 특정 기술이 필요합니다.

솔루션

세 가지 효과적인 방법이 있습니다.

  1. [XmlInclude] 속성: 각 파생 클래스 유형을 포함하여 추상 클래스 선언 앞에 [XmlInclude] 속성을 ​​적용합니다. 이렇게 하면 직렬 변환기가 이러한 특정 파생 유형을 처리하는 방법을 알 수 있습니다.
  2. XmlElement/XmlArrayItem 속성: 목록이 포함된 속성에 [XmlElement] 또는 [XmlArrayItem] 속성을 ​​사용하세요. 직렬 변환기가 개체를 인식하고 역직렬화하도록 지시하려면 이러한 속성에 파생 클래스 형식을 지정합니다.
  3. 두 가지 방법의 조합: 추상 클래스에 [XmlInclude]을 사용하고 속성에 [XmlElement] 또는 [XmlArrayItem]을 사용하여 이 두 가지 방법을 결합하여 명시적 및 암시적 유형 처리를 제공합니다.

다음 코드 조각은 각 방법을 사용한 자세한 구현 예를 제공합니다.

<code class="language-csharp">// 1: [XmlInclude(typeof(ChildA))]
// 1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 2: [XmlElement("A", Type = typeof(ChildA))]
// 2: [XmlElement("B", Type = typeof(ChildB))]
// 3: [XmlArrayItem("A", Type = typeof(ChildA))]
// 3: [XmlArrayItem("B", Type = typeof(ChildB))]
public List<ChildClass> Data { get; set; }

// ... 序列化和反序列化代码在此处 ...</code>

선호하는 방법을 선택하고 파생 클래스 직렬화에 해당하는 코드 조각의 주석 처리를 제거하세요.

위 내용은 XmlSerializer를 사용하여 일반 목록 내에서 파생 클래스를 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.