我有一個具有三列的單個表的強類型數據集。這些列都包含自定義類型。強類型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方法的任何類特定代碼)