2010-04-06 82 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; } 
}