如何反序列化为动态类型

tav*_*ier 7 c# xml serialization

我试图反序列化我的XML以获得一个动态创建的类型数组(使用codedom),之后我使用反射来加载该程序集并加载动态创建的类型.当我尝试反序列化我的XML(它有一个动态生成类型的对象的集合)时,我不知道如何为序列化器提供类型.

我的代码示例:

        Assembly assembly = Assembly.LoadFile("myDynamicassembly.dll");
        Type type = assembly.GetType("myDynamicType");

        string xmlstring = myXml.OuterXml.ToString();
        byte[] buffer = ASCIIEncoding.UTF8.GetBytes(xmlstring);
        MemoryStream ms = new MemoryStream(buffer);
        XmlReader reader = new XmlTextReader(ms);

        myDynamicType[] EQs;
        XmlSerializer serializer = new XmlSerializer(typeof(myDynamicType[]));
        EQs = (myDynamicType[])(serializer.Deserialize(reader));
Run Code Online (Sandbox Code Playgroud)

所以,这里的问题是我在编写代码时不知道"myDynamicType".它将在运行时创建和编译.

请帮忙.

Mar*_*ell 9

这里的技巧是Type.MakeArrayType()在一个实例上的方法Type.无参数版本生成矢量类型,即typeof(Foo).MakeArrayType()=== typeof(Foo[]).多维数组等还有其他重载.

XmlSerializer serializer = new XmlSerializer(type.MakeArrayType());
Run Code Online (Sandbox Code Playgroud)

但是:你最终无法施放它; 您将需要使用object[]或类似(使用引用类型的数组方差):

EQs = (object[])(serializer.Deserialize(reader));
Run Code Online (Sandbox Code Playgroud)