Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET中弱类型对象的XML反序列化_C#_Xml_Serialization_Xml Serialization_Xmlserializer - Fatal编程技术网

C# NET中弱类型对象的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

很抱歉给你一个蹩脚的标题。请随意换一个更好的

问题在于:我需要读取一组如下所示的XML文件:

<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);