XmlSerializer는 파생 클래스의 일반 목록이 포함된 개체를 직렬화할 때 문제를 제시합니다. 이러한 파생 요소의 추상 기본 클래스 특성으로 인해 역직렬화 중에 InvalidOperationException
이 발생하는 경우가 많습니다. 이 일반적인 문제에 대한 해결책을 살펴보겠습니다.
이러한 한계를 극복하기 위한 세 가지 효과적인 전략이 있습니다.
[XmlInclude]
속성<code class="language-csharp">//1: [XmlInclude(typeof(ChildA))] //1: [XmlInclude(typeof(ChildB))] public abstract class ChildClass { /* ... */ }</code>
이 방법을 사용하려면 각 파생 클래스마다 ChildClass
속성을 사용하여 기본 클래스([XmlInclude]
)에 주석을 달아야 합니다.
[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]
속성은 파생 클래스 목록이 포함된 속성에 직접 적용됩니다. 이는 직렬 변환기에 명시적인 유형 정보를 제공합니다.
[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!