相关疑难解决方法(0)

如何在不事先知道类型的情况下使用XmlSerializer反序列化可能是基类或派生类的对象?

在C#中,如何在不XmlSerializer事先知道类型的情况下使用an 反序列化可能是基类的对象,或者反序列化任何几个派生类?

我的所有派生类都添加了其他数据成员.我已经制作了一个简单的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 …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization derived-class xml-deserialization

20
推荐指数
3
解决办法
2万
查看次数