繁体   English   中英

强类型数据集列需要自定义类型以实现IXmlSerializable吗?

[英]Strongly Typed DataSet column requires custom type to implement IXmlSerializable?

我有一个带有三列的单个表的强类型数据集。 这些列均包含自定义类型。

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

尝试使用周围父的包装类在这样的第一列

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM