在C#,如何使用XmlSerializer
反序列化的对象可以是基类或任何几种派生类的事先不知道类型?如何在事先不知道类型的情况下使用XmlSerializer反序列化可能是基类或派生类的对象?
我的派生类的所有添加额外的数据成员。我制作了一个简单的GUI,可以对类对象进行序列化和反序列化。它将序列化对象,因为基于用户选择填充哪些字段,任何继承的类(甚至只是基类)都是合适的。
我有一个序列化没有问题;问题在于反序列化。我怎么可能有XmlSerializer
反序列化数据到正确的派生类,而事先不知道类?我目前创建一个XmlReader
来读取XML文件的第一个节点并确定它的类,它似乎适用于我的目的,但它似乎是一个非常不雅的解决方案。
我贴在下面的示例代码。有什么建议么?
BaseType objectOfConcern = new BaseType();
XmlSerializer xserializer;
XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME);
do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element);
string objectType = xtextreader.Name;
xtextreader.Close();
FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open);
switch (objectType)
{
case "type1":
xserializer = new XmlSerializer(typeof(DerivedType));
objectOfConcern = (DerivedType)xserializer.Deserialize(fstream);
//Load fields specific to that derived type here
whatever = (objectOfConcern as DerivedType).NoOfstreamubordinates.ToString();
case "xxx_1":
//code here
case "xxx_2":
//code here
case "xxx_n":
//code here
//and so forth
case "BaseType":
xserializer = new XmlSerializer(typeof(BaseType));
AssignEventHandler(xserializer);
objectOfConcern = (BaseType)xserializer.Deserialize(fstream);
}
//Assign all deserialized values from base class common to all derived classes here
//Close the FileStream
fstream.Close();
非常酷,非常感谢! – 2015-05-26 19:21:32