using System; using System.IO; using System.Collections; using System.Xml.Serialization; namespace ProcessInfo { [ XmlInclude( typeof( Site ) ) ] [ XmlRoot( "settings" ) ] public class Settings { Site[] sites; public Settings() { sites = new Site[ 0 ]; } public void Save( string filename ) { XmlSerializer serializer = new XmlSerializer( typeof( Settings ) ); serializer.Serialize( new FileStream( filename, FileMode.Create ), this ); } public static Settings Load( string filename ) { XmlSerializer serializer = new XmlSerializer( typeof( Settings ) ); Settings settings = (Settings)serializer.Deserialize( new FileStream( filename, FileMode.Open ) ); foreach ( Site site in settings.Sites ) { if ( site.Name == null ) { throw new InvalidOperationException( "Every site must have a name" ); } if ( site.UrlTemplate == null ) { throw new InvalidOperationException( "Every site must have a url template" ); } } return settings; } [ XmlArray( "sites" ) ] [ XmlArrayItem( "site", typeof( Site ) ) ] public Site[] Sites { get { return sites; } set { sites = value; } } } }