> 백엔드 개발 > C++ > XmlSerializer를 사용하여 파생 클래스의 일반 목록을 성공적으로 직렬화 및 역직렬화하려면 어떻게 해야 합니까?

XmlSerializer를 사용하여 파생 클래스의 일반 목록을 성공적으로 직렬화 및 역직렬화하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-11 10:35:46
원래의
431명이 탐색했습니다.

How Can I Successfully Serialize and Deserialize Generic Lists of Derived Classes Using XmlSerializer?

XmlSerializer를 사용하여 파생 클래스의 일반 목록 직렬화 및 역직렬화

XmlSerializer는 파생 클래스의 일반 목록이 포함된 개체를 직렬화할 때 문제를 제시합니다. 이러한 파생 요소의 추상 기본 클래스 특성으로 인해 역직렬화 중에 InvalidOperationException이 발생하는 경우가 많습니다. 이 일반적인 문제에 대한 해결책을 살펴보겠습니다.

직렬화/역직렬화 문제 해결

이러한 한계를 극복하기 위한 세 가지 효과적인 전략이 있습니다.

1. [XmlInclude] 속성

활용
<code class="language-csharp">//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass { /* ... */ }</code>
로그인 후 복사

이 방법을 사용하려면 각 파생 클래스마다 ChildClass 속성을 ​​사용하여 기본 클래스([XmlInclude])에 주석을 달아야 합니다.

2. 부동산에 [XmlElement] 또는 [XmlArrayItem] 고용

<code class="language-csharp">    //2: [XmlElement("A", Type = typeof(ChildA))]
    //2: [XmlElement("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>
로그인 후 복사

여기서 [XmlElement] 또는 [XmlArrayItem] 속성은 파생 클래스 목록이 포함된 속성에 직접 적용됩니다. 이는 직렬 변환기에 명시적인 유형 정보를 제공합니다.

3. [XmlArrayItem] 부동산

활용
<code class="language-csharp">    //3: [XmlArrayItem("A", Type = typeof(ChildA))]
    //3: [XmlArrayItem("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>
로그인 후 복사

이 접근 방식은 방법 2를 반영하지만 [XmlArrayItem] 대신 [XmlElement]을 사용하여 약간 다른 XML 구조를 제공합니다.

올바른 접근 방식 선택

이러한 각 접근 방식을 사용하면 파생 클래스 목록을 사용하여 객체를 성공적으로 직렬화 및 역직렬화할 수 있습니다. 최적의 선택은 XML 구조 및 유연성에 대한 애플리케이션의 특정 요구 사항에 따라 달라집니다.

위 내용은 XmlSerializer를 사용하여 파생 클래스의 일반 목록을 성공적으로 직렬화 및 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿