使用.NET 3.5。我需要能够在运行时使用基于我从数据库获得的某些XML的属性生成C#类型,然后将XML反序列化为此动态创建的类型的实例。我目前能够使用Reflection.Emit生成动态类型的属性和XmlSerializer来执行反序列化到对象实例,但是,当我创建的类型包含另一个动态创建的类型(或者List另一个动态创建的类型),反序列化失败了。对于包含我生成的动态创建类型列表的动态创建类型,此行为是一致的。抛出的异常是
InvalidOperationException:XML Document(0,0)中存在错误。 ---> TypeInitializationException:...的类型初始值设定项引发异常。 --->的NullReferenceException。
使用的代码:
using (MemoryStream Stream = new MemoryStream(StringToByte(Xml)))
{
// type is the dynamically created type which may contain as a property a List of another dynamically created type.
XmlSerializer serializer = new XmlSerializer(type, RootAttribute);
return serializer.Deserialize(Stream); // This line fails
}
之前有人遇到过这种特殊情况吗?有没有其他/更好的方法来做到这一点? 我无法摆脱创建动态类型,在编译时不知道任何事情。该实例用于填充网格。
非常感谢提前。