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

本文关键字:XML 反序列化 对象 类型 NET | 更新日期: 2023-09-27 18:34:49

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

问题是这样的:我需要读取一组如下所示的 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 文件,它的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[]

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

序列化

和还原未知类

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