C# 通过列表<;儿童>;作为论据?

C# 通过列表<;儿童>;作为论据?,c#,xml,serialization,C#,Xml,Serialization,我想创建一个序列化不同子对象列表的方法。每个孩子都有自己的XML文件。对单个对象执行此操作很容易: 接口ISerializable { } 我可以将从ISerializable派生的任何内容放入serialize方法中,以获得所需的结果。然而,当尽可能地给出List参数时,它不会编译无法将List转换为List。怎么解决这个问题 public static void SerializeListToXML(List<ISerializable> listToXML) {

我想创建一个序列化不同子对象列表的方法。每个孩子都有自己的XML文件。对单个对象执行此操作很容易:

接口ISerializable { }

我可以将从
ISerializable
派生的任何内容放入serialize方法中,以获得所需的结果。然而,当尽可能地给出
List
参数时,它不会编译
无法将List转换为List
。怎么解决这个问题

public static void SerializeListToXML(List<ISerializable> listToXML)
        {
            XmlSerializer serializer = new XmlSerializer(listToXML.GetType());
            using (TextWriter textWriter = new StreamWriter("test.xml"))
            {
                serializer.Serialize(textWriter, listToXML);
            }
        }
publicstaticvoid序列化listToXML(列表listToXML)
{
XmlSerializer serializer=新的XmlSerializer(listoXML.GetType());
使用(TextWriter TextWriter=newstreamWriter(“test.xml”))
{
serializer.Serialize(textWriter,listToXML);
}
}

我这样做的基本原因是获取更大结构的XML模板,因此我可以手动添加XML以加载到我的程序中。我想我应该先创建一个序列化程序,这样我就有了正确的XML结构。也许这在以后保存用户数据时也会派上用场。

SerializeListOXML
应该使用
IEnumerable
而不是
列表


列表
不能强制转换为
列表
。如果可以,那么就可以向列表中添加任何
ISerializable
,而不仅仅是项。使用
IEnumerable
,您无法修改集合-只能对其进行迭代。由于
serializeListOXML
不需要修改集合,因此它可以接受限制较少的
IEnumerable
。请参阅以下关于协方差和逆变换的章节和小节:

这似乎确实有效,谢谢。我不知道你为什么会被否决,也许你得再详细说明一下答案。
public static void SerializeToXML(ISerializable child)
        {
            XmlSerializer serializer = new XmlSerializer(child.GetType());
            using (TextWriter textWriter = new StreamWriter("test.xml"))
            {
                serializer.Serialize(textWriter, child);
            }
        }
public static void SerializeListToXML(List<ISerializable> listToXML)
        {
            XmlSerializer serializer = new XmlSerializer(listToXML.GetType());
            using (TextWriter textWriter = new StreamWriter("test.xml"))
            {
                serializer.Serialize(textWriter, listToXML);
            }
        }