Usually you want to control settings in your application via MetaData instead of hard coding values that may change. With C# serialization this is so easy that you will gladly place settings in a config file. Take the following example that I have recently been working on:
XML Config File:
<?xml version="1.0" encoding="utf-8"?>
<Options xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Option>
<DefaultLogLocation>c:\temp\mtlog.txt</DefaultLogLocation>
<AutoLoadLog>false</AutoLoadLog>
<TailTimeout>1000</TailTimeout>
<MaxBytesToLoad>100000000</MaxBytesToLoad>
<BackgroundColor>WhiteSmoke</BackgroundColor>
<FilterColor>Teal</FilterColor>
<DefaultColor>Black</DefaultColor>
</Option>
<HighlightItem>
<ContainsString>[DEBUG</ContainsString>
<HighlightColor>Black</HighlightColor>
</HighlightItem>
<HighlightItem>
<ContainsString>[INFO</ContainsString>
<HighlightColor>Navy</HighlightColor>
</HighlightItem>
<HighlightItem>
<ContainsString>[WARNING</ContainsString>
<HighlightColor>Orange</HighlightColor>
</HighlightItem>
<HighlightItem>
<ContainsString>[ERROR</ContainsString>
<HighlightColor>DarkRed</HighlightColor>
</HighlightItem>
<HighlightItem>
<ContainsString>[FATAL</ContainsString>
<HighlightColor>Red</HighlightColor>
</HighlightItem>
<HighlightItem>
<ContainsString>***</ContainsString>
<HighlightColor>DarkRed</HighlightColor>
</HighlightItem>
</Options>
C# Class to Read and Save:
using System;
using System.Collections;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Quail
{
/// <summary>
/// Options class which will be serialized.
/// </summary>
[XmlRoot("Options")]
public class MyOptions
{
[XmlElement("Option")]
public Option option;
private ArrayList mHighlightItems;
public MyOptions()
{
option = new Option();
mHighlightItems = new ArrayList();
}
[XmlElement("HighlightItem")]
public HighlightItem[] HighlightItems
{
get
{
HighlightItem[] items = new HighlightItem[ mHighlightItems.Count ];
mHighlightItems.CopyTo( items );
return items;
}
set
{
if( value == null ) return;
HighlightItem[] items = (HighlightItem[])value;
mHighlightItems.Clear();
foreach( HighlightItem item in items )
mHighlightItems.Add( item );
}
}
public int AddItem(HighlightItem item)
{
return mHighlightItems.Add( item );
}
public bool Save()
{
// Serialization
XmlSerializer s = new XmlSerializer( typeof( MyOptions ) );
TextWriter w = new StreamWriter( @"options.xml" );
s.Serialize( w, this );
w.Close();
return true;
}
public static MyOptions Load()
{
// Deserialization
XmlSerializer s = new XmlSerializer( typeof( MyOptions ) );
MyOptions opt;
TextReader r = new StreamReader( @"options.xml" );
opt = (MyOptions)s.Deserialize( r );
r.Close();
return opt;
}
}
public class HighlightItem
{
[XmlElement("ContainsString")]
public string ContainsString;
[XmlElement("HighlightColor")]
public string HiglightColor;
public HighlightItem()
{
}
public HighlightItem(string containsString, string color)
{
ContainsString = containsString;
HiglightColor = color;
}
}
// Option
public class Option
{
[XmlElement("DefaultLogLocation")]
public string DefaultLogLocation = @"c:\temp\mtlog.txt";
[XmlElement("AutoLoadLog")]
public bool AutoLoadLog = false;
[XmlElement("TailTimeout")]
public int TailTimeout = 1000;
[XmlElement("MaxBytesToLoad")]
public long MaxBytesToLoad = 100000000;
[XmlElement("BackgroundColor")]
public string BackgroundColor = "WhiteSmoke";
[XmlElement("FilterColor")]
public string FilterColor = "Teal";
[XmlElement("DefaultColor")]
public string DefaultColor = "Black";
[XmlElement("BorderColor")]
public string BorderColor = "WhiteSmoke";
public Option()
{
}
}
}