You can see that I use the built-in .NET XML attributes in order to achive my goal and control the way my XML serialization will look.
You can check the result using simple XmlHelper class that serialize your .NET object to XML file:
public static class XmlHelper
{
/// <summary>
/// Serialize object in XML format inside a file.
/// </summary>
/// <param name="filename">The file that serialize object will be saved.</param>
/// <param name="objectToSerialize">The object to serialize.</param>
public static void SerializeObject(string filename,
object objectToSerialize)
{
using (Stream stream = File.Open(filename, FileMode.Create, FileAccess.ReadWrite))
{
XmlSerializer xs = new XmlSerializer(objectToSerialize.GetType());
XmlTextWriter xmlTextWriter = new XmlTextWriter(stream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, objectToSerialize);
}
}
/// <summary>
/// Deserializes Object from a file.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filename">The file with the serialize object.</param>
/// <returns></returns>
public static T DeserializeObject<T>(string filename)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
T objectToSerialize;
// Open for read only.
using (Stream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
objectToSerialize = (T)xs.Deserialize(stream);
}
return objectToSerialize;
}
}