C# 反序列化-忽略不必要的元素?

C# 反序列化-忽略不必要的元素?,c#,xsd,xmlserializer,serialization,C#,Xsd,Xmlserializer,Serialization,我有一个XSD模式,我已经为使用XSD.exe生成了一个类,我正在尝试使用XmlSerializer.Deserialize从一个XML文件创建该类的实例,该文件应该符合XSD模式。不幸的是,XML文件有一些架构不期望的额外元素,这导致从反序列化引发System.InvalidOperationException 我已经尝试将元素添加到我的模式中,但这似乎没有任何区别 我的问题是:有没有办法获取XmlSerializer.Deserialize来忽略这些额外的元素?我认为没有办法做到这一点。您要

我有一个XSD模式,我已经为使用XSD.exe生成了一个类,我正在尝试使用
XmlSerializer.Deserialize
从一个XML文件创建该类的实例,该文件应该符合XSD模式。不幸的是,XML文件有一些架构不期望的额外元素,这导致从
反序列化
引发
System.InvalidOperationException

我已经尝试将
元素添加到我的模式中,但这似乎没有任何区别


我的问题是:有没有办法获取
XmlSerializer.Deserialize
来忽略这些额外的元素?

我认为没有办法做到这一点。您要么修复模式,要么手动修改xsd.exe生成的代码,以允许对XML进行反序列化。您还可以尝试在Visual Studio或任何其他支持模式的XML编辑器中打开XML文档+模式,以修复模式或XML文档。

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

[XmlAnyAttribute]
public XmlAttribute[] AnyAttributes;

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


为了给出合理的解释,我是在阅读DasBlog的源代码时第一次接触到这种模式的。

我现在已经习惯了修改xsd.exe的输出。。。这似乎几乎是无用的。我想我将自己解析XML,而不是从模式反序列化。既然我决定在重读你的答案后,我会把它标记为接受:)谢谢!