覆盖在数据集设计器类中定义的XmlRoot属性

时间:2009-12-22 15:47:24

标签: c# serialization dataset

我有一个名为DocumentDataSet的数据集以及一个名为Document的类。

当数据集被序列化时,我需要它将它命名为“Document”,因为我正在与第三方Web服务进行通信。

我虽然在数据集的partial类中定义了属性XmlRoot但是我不能添加XmlRoot的副本,因为它已经在设计器类中定义。

[global::System.Xml.Serialization.XmlRootAttribute("DocumentDataSet")]
public partial class DocumentDataSet : global::System.Data.DataSet { ... }

我可以在设计器类中更改它,但每次在设计中打开数据集时都会重置它。

是否有办法覆盖XmlRoot或使用与其类名不同的名称进行序列化?

1 个答案:

答案 0 :(得分:2)

您可以使用接受表示要使用的XML根元素的XmlRootAttribute的{​​{3}}。

new XmlSerializer(typeof(DocumentDataSet), new XmlRootAttribute("Document"));

也可以这样做:

class DocumentDataSet : DataSet
{
    public new string GetXml()
    {
        return base.GetXml().Replace("DocumentDataSet ", "Document");
    }
}

如果你最终采用这种方法,那么简单Replace是不够的,但这只是为了说明目的。另外请注意,如果您通过基类DataSet引用文档数据集实例,则此最后一种方法将不起作用。

DataSet ds = new DocumentDataSet();

ds.GetXml(); // Wrong