猿问

将类A继承的对象列表序列化为xml,因此xml中元素的名称为B,C,D

使用DataContractSerializer我想序列化从 A 类继承的对象列表。这些对象在不同的程序集中,假设它们属于 B、C 和 D 类。我已将 B、C 和 D 添加到已知类型的数据中合约序列化器。我能够序列化列表,但序列化的结果如下所示:


<SerializedListObjects>

   <A i:type="B">

   <A i:type="C">

</SerializedListObjects>

我想要的是:


<SerializedListObjects>

   <B>

   <C>

</SerializedListObjects>

B 和 C 中可能有一些属性具有从 A 继承的信息。


这是我的基类:


  [Serializable]

  [DataContract(Name = "A")]

  public abstract class A

  {

  }

这是派生类定义的示例。


  [Serializable]

  [DataContract(Name = "B")]

  public class B : A

  {

  }

由于派生类在不同的程序集中,我不能在它们的基类或包含派生类名称的序列化类中放置任何属性(例如[XmlElement("B", Type = typeof(ChildB))]) - 我无法访问那里的派生类。


是否可以?


虽然我目前正在使用DataContractSerializer,但我愿意XmlSerializer在必要时切换到另一个 XML 序列化程序。


BIG阳
浏览 130回答 1
1回答
随时随地看视频慕课网APP
我要回答