.NET中弱类型对象的XML反序列化

时间:2012-05-22 00:09:34

标签: c# xml serialization xml-serialization xmlserializer

抱歉这个糟糕的标题。随意将其更改为更好的。

问题是:我需要读取一组看起来像这样的XML文件:

<rootElement>
   <header>
      <!-- some stuff here -->
   </header>
   <businessContent>
      <oneOfSeveralAllowedSubNodesHereLikeCustomer />
   <businessContent>
</rootElement>

我得到xsd.exe从我已经获得的模式文件中生成C#类,它就像那样(简化):

public class rootElement
{
   public header header {get;set;}
   public object businessContent {get;set;}
}
// other classes like header and classes for the values
// allowed within business content, say customer

请注意,businessContent的类型为System.Object,这是公平的。架构没有明确说明实际可以放在那里的内容。但后来我有一个xml文件,其customer内有一个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[]

1 个答案:

答案 0 :(得分:1)

Serializing and restoring an unknown class

var extraTypes = new[] { typeof(customer), typeof(otherAllowedSubnodeTypes) };
var serializer = new XmlSerializer(typeof(rootElement), extraTypes);