我有一个强类型数据集,其中包含一个包含三列的表。这些列都包含自定义类型。
DataColumn1的类型为Parent
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为null,并填充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,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未实现IXmlSerializable接口,因此无法继续进行序列化。”
我也尝试使用XmlSerializer来序列化数据集,但我得到了相同的异常。
有没有人知道如何解决这个问题,我不需要在所有Child类上实现IXmlSerializable?或者,有没有办法实现IXmlSerializable保持所有默认行为相同(即在ReadXml和WriteXml方法中没有任何特定于类的代码)
答案 0 :(得分:0)
尝试使用第一列中父级的包装类,如下所示
[Serializable]
public class Wrapper
{
[XmlElement(ElementName="Child1", Type=typeof(Child1)),
XmlElement(ElementName="Child2", Type=typeof(Child2))]
public Parent Value { get; set; }
}