创建适用于Generice类的Generic Save()方法

时间:2015-07-23 10:01:20

标签: c# generics

我有一个外部类,让我们说它的签名是XMLSerializer<T>....的XMLSerializer 该类应该获取类型,然后将其保存到文件中。 我有另一个课程&#34; GeometricsObject&#34;以及从该类派生的其他6个类。这些课程需要保存。我试图用3个小时创建一个通用的方法

public void Save<T>(T obj,string fileName){
 XMLSerializer<T>.save(obj,fileName);
}

问题是当我尝试保存public class Rectangle :GeometricsObject的Rectangle时 xmlserializer期望<T>是GeometricsObject但是obj被识别为Rectangle。然后我得到了一个例外。

我试图使用共享接口并保存那些实现此接口的对象,但问题仍然存在。

我试过那些Creating a Generic Save() Method for Models

How do I write a generic Save() method that handles single objects and collections?

我试过

public void Save<T>(T obj,string fileName) where T:(here i tried interface and base class){
 XMLSerializer<T>.save(obj,fileName);
}

没用。

唯一有效的方法是不使用泛型,而是在GeometricsObject类中使用虚拟Save(..),然后每个派生类重写该函数并插入自己的类型。但是这个解决方案在我看来有点蹩脚。必须有一种单一方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

我真的建议你将(de)序列化逻辑(尽管很小)从GeometricObject移到({1}},然后就可以了

GeometricObjectSerializer