将List <child>作为参数传递?</child>

时间:2014-02-22 10:02:44

标签: c# xml serialization

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

  

接口ISerializable       {       }

public class Item : ISerializable
{
    public string name { get; set; }
    public int number { get; set; }
}

public class Weapon : ISerializable
{
    public string name { get; set; }
    public int damage {get; set;}
}
public static void SerializeToXML(ISerializable child)
        {
            XmlSerializer serializer = new XmlSerializer(child.GetType());
            using (TextWriter textWriter = new StreamWriter("test.xml"))
            {
                serializer.Serialize(textWriter, child);
            }
        }

我可以将从ISerializable派生的任何内容放入serialize方法中以获得所需的结果。但是,当给List<ISerializable>作为可能的参数时,它不会编译Cannot convert List<item> to List<ISerializable>。无论如何要解决这个问题?

public static void SerializeListToXML(List<ISerializable> listToXML)
        {
            XmlSerializer serializer = new XmlSerializer(listToXML.GetType());
            using (TextWriter textWriter = new StreamWriter("test.xml"))
            {
                serializer.Serialize(textWriter, listToXML);
            }
        }

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

1 个答案:

答案 0 :(得分:1)

SerializeListToXML应该使用IEnumerable<ISerializable>代替List<Item>

List<Item>无法投放到List<ISerializable>。如果可以,那么您可以将任何ISerializable添加到列表中,而不仅仅是项目。使用IEnumerable<>,您无法修改集合 - 仅对其进行迭代。由于SerializeListToXML不需要修改集合,因此它可以接受IEnumerable<ISerializable>,这种限制较少。请参阅以下部分以及关于协方差和逆变的子部分:Covariance and Contravariance