Kevin A. Boucher

The Art of .Net

  Home :: Contact :: Syndication  :: Login
  34 Posts :: 6 Stories :: 15 Comments :: 3 Trackbacks

Article Categories

Archives

Post Categories

Image Galleries

Blogs Worth Reading

Developer Tools

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() 
    {
    }
  }
}

posted on Friday, January 27, 2006 11:25 AM

Feedback

No comments posted yet.

Post Feedback

 Enter comment validation text:
Title:
Name:
Url:
Comments: