代码之家  ›  专栏  ›  技术社区  ›  Ben Hymers

XmlSerializer.Deserialize-忽略不必要的元素?

  •  3
  • Ben Hymers  · 技术社区  · 14 年前

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

    <xs:any> 元素,但这似乎没有任何区别。

    XmlSerializer.反序列化 忽略这些额外的元素?

    2 回复  |  直到 14 年前
        1
  •  2
  •   chris166    14 年前

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

        2
  •  5
  •   kbrimington    14 年前

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

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

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