2010-04-06 85 views
0

我有一个具有三列的单个表的强类型数据集。这些列都包含自定义类型。强类型DataSet列需要自定义类型来实现IXmlSerializable?

DataColumn1的类型是家长的

DataColumn2的类型是Child1

DataColumn3的类型是CHILD2

下面是这些类的样子:

[Serializable] 
[XmlInclude(typeof(Child1)), XmlInclude(typeof(Child2))] 
public abstract class Parent 
{ 
    public int p1; 
} 
[Serializable] 
public class Child1 :Parent 
{ 
    public int c1; 
} 
[Serializable] 
public class Child2 : Parent 
{ 
    public int c1; 
} 

现在,如果我添加一行DataColumn1为空,DataColumns 2和3填充并尝试序列化它,它的工作原理:

  DataSet1 ds = new DataSet1(); 
     ds.DataTable1.AddDataTable1Row(null, new Child1(), new Child2()); 

     StringBuilder sb = new StringBuilder(); 
     using (StringWriter writer = new StringWriter(sb)) 
     { 
      ds.WriteXml(writer);//Works! 
     } 

但是,如果我尝试将值添加到DataColumn1,它失败:

  DataSet1 ds = new DataSet1(); 
     ds.DataTable1.AddDataTable1Row(new Child1(), new Child1(), new Child2()); 

     StringBuilder sb = new StringBuilder(); 
     using (StringWriter writer = new StringWriter(sb)) 
     { 
      ds.WriteXml(writer);//Fails! 
     } 

这里是例外:

“类型“WindowsFormsApplication4.Child1,WindowsFormsApplication4,版本为1.0。 0.0,Culture = neutral,PublicKeyToken = null'不实现IXmlSerializable接口,因此无法继续进行序列化。“

我也尝试使用XmlSerializer来序列化数据集,但我得到相同的异常。

有没有人知道一种方法来解决这个问题,我不必在所有的Child类上实现IXmlSerializable?另外,有实现IXmlSerializable的保留所有缺省行为相同的方式(即不具有使用ReadXML和中WriteXML方法的任何类特定代码)

回答

0

尝试使用周围父的包装类在这样

第一列
[Serializable] 
public class Wrapper 
{ 
    [XmlElement(ElementName="Child1", Type=typeof(Child1)), 
    XmlElement(ElementName="Child2", Type=typeof(Child2))] 
    public Parent Value { get; set; } 
}