开发者

Override XmlRoot attribute defined in dataset designer class

开发者 https://www.devze.com 2022-12-15 02:34 出处:网络
I have a dataset named DocumentDataSet along with a class named Document. When the dataset is serialized, I need it to have it root named \"Document\" because I\'m communicating with a 3rd party webs

I have a dataset named DocumentDataSet along with a class named Document.

When the dataset is serialized, I need it to have it root named "Document" because I'm communicating with a 3rd party webservice.

I though of defining the attribute XmlRoot in the partial class of the dataset, but I cannot add a duplicate of XmlRoot since it is already defined in the designer class.

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

I could change it in the designer class, but it get reset every time I open the dataset in design.

Is there is a way to override XmlRoot or make it serial开发者_如何学编程ize with a different name that its class name?


You can use the XmlSerializer constructor that accepts an XmlRootAttribute which represents the XML root element to be used.

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

It's also possible to do something like this:

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

If you end up with this approach a simple Replace is not enough, but this is just for illustration purposes. Also be advised that if you reference your document data set instances by the base class DataSet this last approach won't work.

DataSet ds = new DocumentDataSet();

ds.GetXml(); // Wrong
0

精彩评论

暂无评论...
验证码 换一张
取 消