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".它将在运行时创建和编译.
请帮忙.
这里的技巧是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)
| 归档时间: |
|
| 查看次数: |
5716 次 |
| 最近记录: |