gpt4 book ai didi

c# - 使用 XmlSerializer 序列化派生类

转载 作者:IT王子 更新时间:2023-10-29 04:40:57 24 4
gpt4 key购买 nike

我正在使用 XMLSerializer 序列化包含通用列表的对象

List <ChildBase> Children {get;set}

问题是每个元素都来自 ChildBase这实际上是一个抽象类。当我尝试反序列化时,我得到一个 invalidOperationException

有没有一种方法可以将 XMLSerializer 用于派生对象?谢谢。

最佳答案

可以通过三种方式做到这一点;您可以对类型使用 [XmlInclude],也可以对属性使用 XmlElement/XmlArrayItem。它们都显示在下面;取消注释您喜欢的对:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
public class MyWrapper {
//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; }
}
//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
public string ChildProp { get; set; }
}
public class ChildA : ChildClass {
public string AProp { get; set; }
}
public class ChildB : ChildClass {
public string BProp { get; set; }
}
static class Program {
static void Main() {
var ser = new XmlSerializer(typeof(MyWrapper));
var obj = new MyWrapper {
Data = new List<ChildClass> {
new ChildA { ChildProp = "abc", AProp = "def"},
new ChildB { ChildProp = "ghi", BProp = "jkl"}}
};
ser.Serialize(Console.Out, obj);
}
}

关于c# - 使用 XmlSerializer 序列化派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com