gpt4 book ai didi

c# - 如何将填充有其子类的基类数组序列化为 XML?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:10 25 4
gpt4 key购买 nike

我正在尝试序列化包含一些 TestChild 对象的 Test 对象数组。

public class Test
{
public string SomeProperty { get; set; }
}

public class TestChild : Test
{
public string SomeOtherProperty { get; set; }
}

class Program
{
static void Main()
{
Test[] testArray = new[]
{
new TestChild { SomeProperty = "test1", SomeOtherProperty = "test2" },
new TestChild { SomeProperty = "test3", SomeOtherProperty = "test4" },
new TestChild { SomeProperty = "test5", SomeOtherProperty = "test6" },
};

XmlSerializer xs = new XmlSerializer(typeof(Test));

using (XmlWriter writer = XmlWriter.Create("test.xml"))
xs.Serialize(writer, testArray);
}
}

我得到 InvalidOperationException,表示 TestChild 无法转换为 Test。

这是有道理的,但有没有办法做到这一点?

最佳答案

最简单的方法是注释类,以便序列化程序预期子类:

[XmlInclude(typeof(TestChild))]
public class Test
{
public string SomeProperty { get; set; }
}

否则(如果为 XmlSerializer 使用更复杂的构造函数)您需要非常小心地缓存和重新使用序列化程序实例 - 否则它会大量占用内存(它每次都创建一个无法被垃圾回收的程序集;最简单 构造函数只采用 Type 为您处理此缓存)。

关于c# - 如何将填充有其子类的基类数组序列化为 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4538999/

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