多态XML序列化/反序列化

时间:2010-11-01 17:54:50

标签: .net xml serialization xml-serialization

我有:

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 个答案:

答案 0 :(得分:8)

使用XmlSerializer尝试XmlArrayItem

public class X
{        
     [XmlArrayItem(typeof(D)),
      XmlArrayItem(typeof(B))]
     public B[] Col { get; set; }
}

答案 1 :(得分:4)

听起来你在序列化对象的集合部分时遇到了麻烦。在使用XML包含派生类型的集合序列化时,需要通知序列化程序有关可能出现在XmlInclude属性

的集合中的所有派生类型的信息。
[KnownType(typeof(D))] 
public class X 
{ 
  [XmlInclude(Type=typeof(B))]
  [XmlInclude(Type=typeof(D))]        
  public B[] Col { get; set; } 
}