I'm trying to find a simple, clean and fast way to implement an XML config file in C# without any 3rd party tools. It also should replace this restricted System.Configuration.ConfigurationManager.
using System;
using System.IO;
[Serializable]
public class MyConfigFile
{
// Static Members
public static readonly string ConfigFilename = "myConfig.config";
public static readonly string ConfigFullFilename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), ConfigFilename);
// Singlton
private static MyConfigFile _myConfig;
public static MyConfigFile Instance
{
get
{
if (_myConfig == null)
{
if (!File.Exists(ConfigFullFilename))
{
_myConfig = new MyConfigFile();
Save();
}
else
{
_myConfig = Load();
}
}
return _myConfig;
}
}
// Constructor
public MyConfigFile()
{
Version = 1;
ValueA = "Important Value";
ValueB = DateTime.Now;
ValueC = false;
}
// Properties
public int Version { get; set; }
public string ValueA { get; set; }
public DateTime ValueB { get; set; }
public bool ValueC { get; set; }
// Static Methodes
public static void Save()
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(_myConfig.GetType());
StreamWriter writer = File.CreateText(ConfigFullFilename);
xs.Serialize(writer, _myConfig);
writer.Flush();
writer.Close();
}
public static MyConfigFile Load()
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(MyConfigFile));
StreamReader reader = File.OpenText(ConfigFullFilename);
var c = (MyConfigFile)xs.Deserialize(reader);
reader.Close();
return c;
}
}
This code works fine, but I wonder if you can improve it or have any better ideas.