我有一个名为DocumentDataSet的数据集以及一个名为Document的类。
当数据集被序列化时,我需要它将它命名为“Document”,因为我正在与第三方Web服务进行通信。
我虽然在数据集的partial类中定义了属性XmlRoot
但是我不能添加XmlRoot的副本,因为它已经在设计器类中定义。
[global::System.Xml.Serialization.XmlRootAttribute("DocumentDataSet")]
public partial class DocumentDataSet : global::System.Data.DataSet { ... }
我可以在设计器类中更改它,但每次在设计中打开数据集时都会重置它。
是否有办法覆盖XmlRoot
或使用与其类名不同的名称进行序列化?
答案 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