C# 序列化运行时创建的类型
我已经创建了一个类型,下面是C# 序列化运行时创建的类型,c#,.net,serialization,reflection.emit,C#,.net,Serialization,Reflection.emit,我已经创建了一个类型,下面是System.Reflection.Emit 我使用以下代码创建我的类型和实例: //following the tutorial I created a method which returns a dynamic type Type myDynamicType = CreateNewObject("MyDynamicType", fields); var instance = Activator.CreateInstance(myDynamicType); 现在
System.Reflection.Emit
我使用以下代码创建我的类型和实例:
//following the tutorial I created a method which returns a dynamic type
Type myDynamicType = CreateNewObject("MyDynamicType", fields);
var instance = Activator.CreateInstance(myDynamicType);
现在我想用XmlSerializer
我试过这个:
FileStream fs = new FileStream(@"C:\Test\SerializedDynamic.XML", FileMode.Create);
XmlSerializer xs = new XmlSerializer(typeof(object));
xs.Serialize(fs, instance);
但它抛出了一个例外:
"The type MyDynamicType was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."
有什么帮助吗?展开评论: 我认为问题在于您正在使用
typeof(object)
创建XmlSerializer
如果您使用以下任一项,则应能正常工作:
XmlSerializer xs = new XmlSerializer(myDynamicType);
XmlSerializer xs = new XmlSerializer(instance.GetType());
在评论的基础上扩展: 我认为问题在于您正在使用
typeof(object)
创建XmlSerializer
如果您使用以下任一项,则应能正常工作:
XmlSerializer xs = new XmlSerializer(myDynamicType);
XmlSerializer xs = new XmlSerializer(instance.GetType());
您是否尝试过强制转换?或者,如果您这样做,会发生以下情况:
XmlSerializer xs=newxmlserializer(myDynamicType)代码>?你能按它说的做吗?是否可以向动态类型添加属性?主要是[xmlclude]
,它应该告诉您它是什么数据类型。然而,我认为@JonEgerton发现的真正问题是——您必须为序列化程序提供一个类型(如果您将实例作为参数传递给执行序列化的方法,还可以尝试新的XmlSerializer(instance.GetType())
),它是有效的。我不知道为什么我忘了投!我现在必须去喝杯咖啡!感谢您尝试了强制转换吗?或者如果您这样做会发生什么:XmlSerializer xs=newxmlserializer(myDynamicType)代码>?你能按它说的做吗?是否可以向动态类型添加属性?主要是[xmlclude]
,它应该告诉您它是什么数据类型。然而,我认为@JonEgerton发现的真正问题是——您必须为序列化程序提供一个类型(如果您将实例作为参数传递给执行序列化的方法,还可以尝试新的XmlSerializer(instance.GetType())
),它是有效的。我不知道为什么我忘了投!我现在必须去喝杯咖啡!谢谢各位