Amir Mirhassani
Amir Mirhassani

Reputation: 1

Multi root XML with nested class

I have a class like this:

public class Response
{
    public String AdditionalData = "";

    public Boolean Success = false;

    public int ErrorCode = 0;

    public int WarningCode = 0;

    public Transaction TransactionInfo = null;

    public PosInfo PosInformation = null;
}

and i can serialize this successfully. but when i serialize this class 2 times and save it in a XML file,multi root error appear in XML editor. i know it needs a XML element to be root to surround other tags, but i don't know how to add root element in a serialize code. sterilizer class is below:

public class Serializer
{
   public void XMLSerializer(Response response)
    {
        string path = "D:/Serialization.xml";
        FileStream fs;
        XmlSerializer xs = new XmlSerializer(typeof(Response));
        if(!File.Exists(path))
        {
            fs = new FileStream(path, FileMode.OpenOrCreate);
        }
        else
        {
            fs = new FileStream(path, FileMode.Append);
        }
        StreamWriter sw = new StreamWriter(fs);
        XmlTextWriter xw = new XmlTextWriter(sw);
        xw.Formatting = System.Xml.Formatting.Indented;
        xs.Serialize(xw, response);
        xw.Flush();
        fs.Close();
    }
}

Upvotes: 0

Views: 108

Answers (1)

jazb
jazb

Reputation: 5791

I would recommend improving your code to at least take care of disposable resources.

using Statement

Provides a convenient syntax that ensures the correct use of IDisposable objects.

public class Serializer
{
    public void XMLSerializer(Response response)
    {
        string path = "D:/Serialization.xml";

        var xs = new XmlSerializer(typeof(Response));           

        using (var fs = new FileStream(path, FileMode.OpenOrCreate))
        {
            using (var sw = new StreamWriter(fs))
            {
                using (var xw = new XmlTextWriter(sw))
                {
                    xw.Formatting = System.Xml.Formatting.Indented;
                    xs.Serialize(xw, response);
                    xw.Flush();
                }
            }

            fs.Close();
        }
    }
}

Upvotes: 1

Related Questions