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())
),它是有效的。我不知道为什么我忘了投!我现在必须去喝杯咖啡!谢谢各位