XmlSerializer를 사용하여 파생 클래스 직렬화
XmlSerializer를 사용하여 추상 클래스 파생 클래스의 일반 목록이 포함된 개체를 직렬화하는 경우 역직렬화 프로세스 중에 InvalidOperationException 예외가 발생할 수 있습니다. 이 문제를 해결하려면 파생 개체의 직렬화를 처리하기 위한 특정 기술이 필요합니다.
솔루션
세 가지 효과적인 방법이 있습니다.
[XmlInclude]
속성: 각 파생 클래스 유형을 포함하여 추상 클래스 선언 앞에 [XmlInclude]
속성을 적용합니다. 이렇게 하면 직렬 변환기가 이러한 특정 파생 유형을 처리하는 방법을 알 수 있습니다. XmlElement
/XmlArrayItem
속성: 목록이 포함된 속성에 [XmlElement]
또는 [XmlArrayItem]
속성을 사용하세요. 직렬 변환기가 개체를 인식하고 역직렬화하도록 지시하려면 이러한 속성에 파생 클래스 형식을 지정합니다. [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 중국어 웹사이트의 기타 관련 기사를 참조하세요!