Serialize an object to XML

后端 未结 17 1919
渐次进展
渐次进展 2020-11-22 04:41

I have a C# class that I have inherited. I have successfully \"built\" the object. But I need to serialize the object to XML. Is there an easy way to do it?

It looks

相关标签:
17条回答
  • 2020-11-22 05:31

    The following function can be copied to any object to add an XML save function using the System.Xml namespace.

    /// <summary>
    /// Saves to an xml file
    /// </summary>
    /// <param name="FileName">File path of the new xml file</param>
    public void Save(string FileName)
    {
        using (var writer = new System.IO.StreamWriter(FileName))
        {
            var serializer = new XmlSerializer(this.GetType());
            serializer.Serialize(writer, this);
            writer.Flush();
        }
    }
    

    To create the object from the saved file, add the following function and replace [ObjectType] with the object type to be created.

    /// <summary>
    /// Load an object from an xml file
    /// </summary>
    /// <param name="FileName">Xml file name</param>
    /// <returns>The object created from the xml file</returns>
    public static [ObjectType] Load(string FileName)
    {
        using (var stream = System.IO.File.OpenRead(FileName))
        {
            var serializer = new XmlSerializer(typeof([ObjectType]));
            return serializer.Deserialize(stream) as [ObjectType];
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:31

    my work code. Returns utf8 xml enable empty namespace.

    // override StringWriter
    public class Utf8StringWriter : StringWriter
    {
        public override Encoding Encoding => Encoding.UTF8;
    }
    
    private string GenerateXmlResponse(Object obj)
    {    
        Type t = obj.GetType();
    
        var xml = "";
    
        using (StringWriter sww = new Utf8StringWriter())
        {
            using (XmlWriter writer = XmlWriter.Create(sww))
            {
                var ns = new XmlSerializerNamespaces();
                // add empty namespace
                ns.Add("", "");
                XmlSerializer xsSubmit = new XmlSerializer(t);
                xsSubmit.Serialize(writer, obj, ns);
                xml = sww.ToString(); // Your XML
            }
        }
        return xml;
    }
    

    Example returns response Yandex api payment Aviso url:

    <?xml version="1.0" encoding="utf-8"?><paymentAvisoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" performedDatetime="2017-09-01T16:22:08.9747654+07:00" code="0" shopId="54321" invoiceId="12345" orderSumAmount="10643" />
    
    0 讨论(0)
  • 2020-11-22 05:31

    Or you can add this method to your object:

        public void Save(string filename)
        {
            var ser = new XmlSerializer(this.GetType());
            using (var stream = new FileStream(filename, FileMode.Create))
                ser.Serialize(stream, this);
        }
    
    0 讨论(0)
  • 2020-11-22 05:36

    All upvoted answers above are correct. This is just simplest version:

    private string Serialize(Object o)
    {
        using (var writer = new StringWriter())
        {
            new XmlSerializer(o.GetType()).Serialize(writer, o);
            return writer.ToString();
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:36

    Here is a good tutorial on how to do this

    You should basically use System.Xml.Serialization.XmlSerializer class to do this.

    0 讨论(0)
提交回复
热议问题