C# NET中弱类型对象的XML反序列化
很抱歉给你一个蹩脚的标题。请随意换一个更好的 问题在于:我需要读取一组如下所示的XML文件:C# NET中弱类型对象的XML反序列化,c#,xml,serialization,xml-serialization,xmlserializer,C#,Xml,Serialization,Xml Serialization,Xmlserializer,很抱歉给你一个蹩脚的标题。请随意换一个更好的 问题在于:我需要读取一组如下所示的XML文件: <rootElement> <header> <!-- some stuff here --> </header> <businessContent> <oneOfSeveralAllowedSubNodesHereLikeCustomer /> <businessContent
<rootElement>
<header>
<!-- some stuff here -->
</header>
<businessContent>
<oneOfSeveralAllowedSubNodesHereLikeCustomer />
<businessContent>
</rootElement>
请注意,businessContent
的类型是System.Object
,这很公平。模式没有明确说明实际可以放在那里的内容。但是我有一个xml文件,它的businessContent
内部有一个customer
。客户在xsd中定义,xsd.exe
也为其生成了一个类。我希望创建该类的一个实例并将其作为我的businessContent
,但是当我阅读XML时:
var serializer = new XmlSerializer(typeof(rootElement));
var root = (rootElement)serializer.Deserialize(stream));
var customer = (customer)root.businessContent;
我得到一个异常,因为root.businessContent
的类型是XmlNode[]
而不是customer
那么,如何使序列化程序完全反序列化我的对象,即使用customer
而不是XmlNode[]
内部?
这最终导致异常,抱怨无法使用匿名类型客户。这是编译器错误还是运行时异常?你能给我们确切的错误信息吗
customer
不是匿名类型,所以我不明白你说了什么。它有[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]异常为System.InvalidOperationException:不能包括匿名类型“customer”。System.Xml.Serialization.XmlSerializator..ctor(类型,XmlAttributeOverrides重写,类型[]extraTypes,XmlRootAttribute根,字符串defaultNamespace,字符串位置,证据证据证据)处的System.Xml.Serialization.XmlSerializator..ctor(类型,XmlAttributeOverrides重写,类型[]extraTypes,XmlRootAttribute根,字符串defaultNamespace,字符串位置,证据)(类型类型,类型[]外部类型)
var serializer = new XmlSerializer(typeof(rootElement));
var root = (rootElement)serializer.Deserialize(stream));
var customer = (customer)root.businessContent;
var extraTypes = new[] { typeof(customer), typeof(otherAllowedSubnodeTypes) };
var serializer = new XmlSerializer(typeof(rootElement), extraTypes);