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

多态XML序列化/反序列化

  •  3
  • Andrey  · 技术社区  · 14 年前

    我有:

    public class B     
    {
        public string Some { get; set; }
    }
    
    public class D : B
    {
        public string More { get; set; }
    }
    
    [KnownType(typeof(D))]
    public class X
    {        
        public B[] Col { get; set; }
    }
    

    我希望自动读/写XML,就像:

    <X>
     <Col>
      <B Some="val1" />
      <D Some="val2" More="val3" />
     </Col>
    </X>
    

    既不 XmlSerializer DataContractSerializer 帮助了我。此XML结构是必需的。

    所以问题是:这是可以实现的还是必须手动解析XML?

    谢谢, 安德烈

    2 回复  |  直到 14 年前
        1
  •  8
  •   Dmitry Ornatsky    14 年前

    尝试 XmlArrayItem 使用XmlSerializer:

    public class X
    {        
         [XmlArrayItem(typeof(D)),
          XmlArrayItem(typeof(B))]
         public B[] Col { get; set; }
    }
    
        2
  •  4
  •   JaredPar    14 年前

    听起来您在序列化对象的集合部分时遇到了问题。在XML中序列化可包含派生类型的集合时,需要通知序列化程序可能在集合中出现的所有派生类型 XmlInclude 属性

    [KnownType(typeof(D))] 
    public class X 
    { 
      [XmlInclude(Type=typeof(B))]
      [XmlInclude(Type=typeof(D))]        
      public B[] Col { get; set; } 
    }