>백엔드 개발 >C++ >XmlSerializer를 사용하여 추상 기본 클래스의 파생 유형 목록을 어떻게 직렬화할 수 있습니까?

XmlSerializer를 사용하여 추상 기본 클래스의 파생 유형 목록을 어떻게 직렬화할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-11 09:47:42998검색

How Can I Serialize a List of Abstract Base Class's Derived Types Using XmlSerializer?

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

추상 기본 클래스 일반 목록이 포함된 개체를 직렬화하면 XmlSerializer를 사용할 때 문제가 발생할 수 있습니다. 이 문서에서는 이 문제를 해결하는 방법을 살펴봅니다.

질문:

파생 클래스 목록(List)이 포함된 개체입니다. 여기서 파생 클래스는 추상적이고 역직렬화 프로세스 중에 InvalidOperationException이 발생할 수 있습니다.

해결책:

파생 객체를 성공적으로 직렬화하려면 다음 세 가지 방법을 사용할 수 있습니다.

  1. [XmlInclude] 사용: 이 속성을 사용하면 직렬화할 때 포함할 파생 유형을 지정할 수 있습니다. 파생 유형 수가 적은 상황에 적합합니다.
  2. XmlElement/XmlArrayItem 사용: 이러한 속성을 사용하면 속성과 연결된 파생 유형을 직접 지정할 수 있습니다. 파생 유형 수가 많은 상황에 더 적합합니다.

코드 예:

다음 코드는 세 가지 방법을 보여줍니다.

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Xml.Serialization;

// 方法一:使用 [XmlInclude]
[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 方法二:使用 XmlElement
public class MyWrapper {
    [XmlElement("ChildA", Type = typeof(ChildA))]
    [XmlElement("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

// 方法三:使用 XmlArrayItem
public class MyWrapper2 {
    [XmlArrayItem("ChildA", Type = typeof(ChildA))]
    [XmlArrayItem("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

public class ChildA : ChildClass {
    public string AProp { get; set; }
}

public class ChildB : ChildClass {
    public string BProp { get; set; }
}</code>

필수 속성 쌍의 주석 처리를 제거하면 요구 사항에 가장 적합한 솔루션을 선택할 수 있습니다.

위 내용은 XmlSerializer를 사용하여 추상 기본 클래스의 파생 유형 목록을 어떻게 직렬화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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