我正在实现一个Base对象类来实现XmlSerializer。
class FN_ObjectBase
{
public object FromXML(string xml)
{
var serializer = new XmlSerializer(typeof("ObjectA??"));
var reader = new XmlTextReader(new StringReader(xml));
var scriptItem = serializer.Deserialize(reader);
return scriptItem;
}
}
class ObjectA : FN_ObjectBase
{
public object = new ObjectA.FromXML("serializedXML");
}
如何正确编写FromXML方法以根据派生类创建任何对象?
答案 0 :(得分:3)
尝试使用通用方法:
public T FromXML<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
var reader = new XmlTextReader(new StringReader(xml));
var scriptItem = serializer.Deserialize(reader);
return (T)scriptItem;
}
称之为:
FromXML<ObjectA>("serialized xml")
OOP规则: 切勿在基类型中使用派生类型。
答案 1 :(得分:0)
您不需要抽象方法,虽然泛型方法实现可行,但它向调用者发出略微不同(尽管可能更好)的意图。
您需要做的就是将this.GetType()
传递给基础实现中的XMLSerializer
构造函数。