【问题标题】:XmlSerializer.Deserialize - ignore unnecessary elements?XmlSerializer.Deserialize - 忽略不必要的元素?
【发布时间】:2010-08-07 14:30:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# xsd xmlserializer serialization


    【解决方案1】:

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

    [XmlAnyAttribute]
    public XmlAttribute[] AnyAttributes;
    
    [XmlAnyElement]
    public XmlElement[] AnyElements;
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我现在已经习惯了不得不修改 xsd.exe 的输出......它似乎几乎没用。我想我只会自己解析 XML,而不是从模式中反序列化。由于我决定在重新阅读您的答案后,我会将其标记为已接受:) 谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多