XML class serializer in C#

Filed Under (c#) by The Chef on 06-06-2009

Tagged Under : , , , ,

Here it is a short class very useful for serializing and deserializing. This is a good for settings file or configuration files.

using System.Xml.Serialization;
using System.IO;
using System.Text;

namespace XMLData
{
    public static class ObjectXMLSerializer<T> where T : class
    {
        public static T Load(string path)
        {
            T mRet = null;

            using (TextReader textReader = new StreamReader(path))
            {
                XmlSerializer mXmlSerializer = new XmlSerializer(typeof(T));
                mRet = mXmlSerializer.Deserialize(textReader) as T;
            }

            return mRet;
        }

        public static void Save(T serializableObject, string path)
        {
            using (TextWriter mTextWriter = new StreamWriter(path))
            {
                XmlSerializer mXmlSerializer = new XmlSerializer(typeof(T));
                mXmlSerializer.Serialize(mTextWriter, serializableObject);
            }
        }
        public static T LoadString(string mString)
        {
            T mRet = null;

            using (MemoryStream textReader = new MemoryStream(Encoding.ASCII.GetBytes(mString)))
            {
                XmlSerializer mXmlSerializer = new XmlSerializer(typeof(T));
                mRet = mXmlSerializer.Deserialize(textReader) as T;
            }

            return mRet;
        }
    }
}

Here it is a short usage example:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            links lnk = new links();
            lnk.str = "something";
            lnk.integer = 23;
            lnk.floatnumber = 0.23f;
            lnk.stringlist.Add("element 1");
            lnk.stringlist.Add("element 2");
            lnk.stringlist.Add("element 3");
            //save class to xml
            XMLData.ObjectXMLSerializer<links>.Save(lnk, @"c:\test.xml");
            //load class from xml
            lnk = XMLData.ObjectXMLSerializer<links>.Load(@"c:\test.xml");
        }

    }

    [Serializable]
    public class links
    {
        public String str;
        public int integer;
        public float floatnumber;
        public List<string> stringlist = new List<string>();
    }
}

and this is the xml it produces:

<?xml version="1.0" encoding="utf-8"?>
<links xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <str>something</str>
  <integer>23</integer>
  <floatnumber>0.23</floatnumber>
  <stringlist>
    <string>element 1</string>
    <string>element 2</string>
    <string>element 3</string>
  </stringlist>
</links>