代码之家  ›  专栏  ›  技术社区  ›  sylvanaar

如何在没有保证架构的情况下使用.NET XML序列化

  •  1
  • sylvanaar  · 技术社区  · 15 年前

    基本上,我有一些需要反序列化的XML。在编写代码时,我将了解XML的结构,但我希望能够在不必更新序列化代码的情况下对XML进行简单的更改。

    例子:

    <foo>
      <bar/>
    </foo>
    

    我希望能够反序列化foo,即使我添加了一个未在attributed serializable类中定义的附加节点。

    <foo>
      <bar/>
      <extra-tag/>
    </foo>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Joe Field    15 年前

    如果我能正确理解你的问题,这就行了。

    给出一个类:

    [XmlRoot("foo")]
    public class Foo
    {
        [XmlElement("bar")]
        public string Bar;
        [XmlElement("extra-tag")]
        public string ExtraTag;
    }
    

    那么这个代码就可以正常工作了:

    string xml = 
    @"<foo>
      <bar>bar</bar>
      <extra-tag>extra-tag</extra-tag>
    </foo>";
    
    
    XmlSerializer serializer = new XmlSerializer(typeof(Foo));
    Foo afoo = (Foo)serializer.Deserialize(new StringReader(xml));
    

    但是如果你的班级看起来像这样:

    [XmlRoot("foo")]
    public class Foo
    {
        [XmlElement("bar")]
        public string Bar;
    }
    

    代码继续工作