C# 强类型数据集列需要自定义类型来实现IXmlSerializable?
我有一个强类型数据集,其中有一个表和三列。这些列都包含自定义类型 DataColumn1的类型为Parent DataColumn2的类型为Child1 DataColumn3属于Child2类型 以下是这些类的外观:C# 强类型数据集列需要自定义类型来实现IXmlSerializable?,c#,serialization,dataset,C#,Serialization,Dataset,我有一个强类型数据集,其中有一个表和三列。这些列都包含自定义类型 DataColumn1的类型为Parent DataColumn2的类型为Child1 DataColumn3属于Child2类型 以下是这些类的外观: [Serializable] [XmlInclude(typeof(Child1)), XmlInclude(typeof(Child2))] public abstract class Parent { public int p1; } [Serializabl
[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,并且填充了DataColumn2和DataColumn3,并尝试对其进行序列化,那么它可以工作:
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,区域性=中性,PublicKeyToken=null”未实现IXmlSerializable接口,因此无法继续序列化
我还尝试使用XmlSerializer来序列化数据集,但我得到了相同的异常
有没有人知道一种方法可以避免我不必在所有子类上实现IXmlSerializable的情况?或者,是否有一种方法可以实现IXmlSerializable,使所有默认行为保持相同,即在ReadXml和WriteXml方法中没有任何特定于类的代码
[Serializable]
public class Wrapper
{
[XmlElement(ElementName="Child1", Type=typeof(Child1)),
XmlElement(ElementName="Child2", Type=typeof(Child2))]
public Parent Value { get; set; }
}