强类型DataSet列需要自定义类型来实现IXmlSerializable吗?

时间:2010-04-06 19:54:57

标签: c# serialization dataset

我有一个强类型数据集,其中包含一个包含三列的表。这些列都包含自定义类型。

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方法中没有任何特定于类的代码)

1 个答案:

答案 0 :(得分:0)

尝试使用第一列中父级的包装类,如下所示

[Serializable]
public class Wrapper
{
    [XmlElement(ElementName="Child1", Type=typeof(Child1)),
    XmlElement(ElementName="Child2", Type=typeof(Child2))]
    public Parent Value { get; set; }
}