我有一个XSD架构,我已经生成了一个使用xsd.exe的类,我正在尝试使用XmlSerializer.Deserialize
从XML文件创建该类的实例符合XSD架构。不幸的是,XML文件有一些架构不期望的额外元素,这导致System.InvalidOperationException
抛出Deserialize
。
我尝试将<xs:any>
元素添加到我的架构中,但这似乎没有任何区别。
我的问题是:有没有办法让XmlSerializer.Deserialize
忽略这些额外的元素?
答案 0 :(得分:5)
我通常会为所有实体类添加额外的属性或字段,以获取额外的元素和属性,看起来像下面的代码:
[XmlAnyAttribute]
public XmlAttribute[] AnyAttributes;
[XmlAnyElement]
public XmlElement[] AnyElements;
根据生成代码的复杂程度,您可能无法在每个吸引人的实体上手动插入此代码。在基类中定义这些属性并确保所有实体继承基础可能只是稍微有点乏味。
为了公平归属,我在阅读DasBlog的源代码时首先介绍了这种模式。
答案 1 :(得分:2)
我认为没有选择这样做。您必须修复架构或手动修改xsd.exe生成的代码以允许反序列化XML。您还可以尝试在Visual Studio或任何其他具有架构支持的XML编辑器中打开XML文档+架构,以修复架构或XML文档。