Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override XmlRoot attribute defined in dataset designer class

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 serialize with a different name that its class name?

like image 432
Pierre-Alain Vigeant Avatar asked Dec 09 '25 22:12

Pierre-Alain Vigeant


1 Answers

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
like image 132
João Angelo Avatar answered Dec 12 '25 13:12

João Angelo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!