在C#中,如何使用
我所有的派生类都添加了额外的数据成员。我制作了一个简单的GUI,可以将类对象序列化和反序列化。它会根据用户选择填充的字段将对象序列化为适当的继承类(甚至只是基类)。
我对序列化没有问题;问题在于反序列化。如何让
我在下面发布了一些示例代码。有什么建议吗?
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();