在c#

时间:2017-12-10 18:12:00

标签: c# class generics serialization

我有不同的可序列化的类。

我有一个方法可以这样做:

public void Serialize(List<ClassName1> CT, string Address)
{
    ...
    XmlSerializer serializer = new XmlSerializer(typeof(List<ClassName1>));
    ...
}

为了序列化ClassName1,我可以使用这个函数,但我不能将它用于名为ClassName2的第二个类。 类是不同的,但两者都是可序列化的。

我现在可以复制并粘贴方法,只是更改类,但我觉得这很愚蠢,因为方法的唯一区别就是名称。

我试着这样做:

public void Serialize(List<object> CT, string Address)
{
    ...
    XmlSerializer serializer = new XmlSerializer(typeof(List<object>));
    ...
}

因为我认为一切都是c#中的“对象”,但是当我使用它时,我得到了“无法转换”的错误。

xml.Serialize(listNumber, Address);

我觉得这可以用泛型来解决,但我从来没有使用任何类型的泛型,所以我完全不知道它是否以及它应该如何工作。

2 个答案:

答案 0 :(得分:1)

这是泛型的理想用法:

public void Serialize<T>(List<T> CT, string Address)
{
    ...
    XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
    ...
}

并且在大多数情况下,您甚至不必更改调用代码 - 编译器将自动推断泛型类型参数。

答案 1 :(得分:0)

由于Serialize的{​​{1}}方法有一个XmlSerializer参数可供序列化的对象使用,所以也一样。

object

除非您的方法使用列表执行其他操作,否则使用泛型似乎没有任何优势。在这种情况下使用Marc Gravell的方法。