3

我有一个 XSD 架构,我已经生成了一个用于使用 xsd.exe 的类,并且我正在尝试XmlSerializer.Deserialize从一个应该符合 XSD 架构的 XML 文件中创建该类的一个实例。不幸的是,XML 文件有一些架构不期望的额外元素,这会导致System.InvalidOperationExceptionDeserialize.

我尝试将<xs:any>元素添加到我的架构中,但这似乎没有任何区别。

我的问题是:有什么办法可以XmlSerializer.Deserialize忽略这些额外的元素?

4

2 回答 2

5

我通常向所有实体类添加额外的属性或字段以获取额外的元素和属性,类似于下面的代码:

[XmlAnyAttribute]
public XmlAttribute[] AnyAttributes;

[XmlAnyElement]
public XmlElement[] AnyElements;

根据生成代码的复杂性,您可能不会发现在每个实体上手动插入此代码很有吸引力。也许只是稍微不那么繁琐的是在基类中定义这些属性并确保所有实体都继承基类。

为了公平起见,我是在阅读 DasBlog 的源代码时第一次接触到这种模式。

于 2010-08-17T02:29:26.930 回答
2

我不认为有这样做的选择。您必须修复架构或手动修改 xsd.exe 生成的代码以允许反序列化 XML。您还可以尝试在 Visual Studio 或任何其他支持架构的 XML 编辑器中打开 XML 文档 + 架构,以修复架构或 XML 文档。

于 2010-08-07T14:57:55.887 回答