0

对不起一个蹩脚的标题。随意将其更改为更好的。

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

请注意,类型businessContentSystem.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.businessContentisXmlNode[]和 not的类型customer

那么如何使序列化程序完全反序列化我的对象,即在内部customer而不是XmlNode[]内部?

4

1 回答 1

1

序列化和恢复未知类

var extraTypes = new[] { typeof(customer), typeof(otherAllowedSubnodeTypes) };
var serializer = new XmlSerializer(typeof(rootElement), extraTypes);
于 2012-05-22T00:43:41.860 回答