我有一个具有三列的单个表的强类型数据集。这些列都包含自定义类型。强类型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方法的任何类特定代码)