2009-05-18 12 views
5

を使用して保存していないがここでC#アプリケーション設定は、カスタムクラス

[Serializable] 
[XmlRoot(ElementName = "Database", IsNullable = false, Namespace = "http://somesite.com")] 

class Database 
{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string Name { get; set; } 

    [XmlAttribute(AttributeName = "Provider")] 
    public DatabaseProvider Provider { get; set; } 

    [XmlAttribute(AttributeName = "Driver")] 
    public string Driver { get; set; } 

    [XmlElement("DatabaseEntry")] 
    public List<DatabaseEntry> SavedEntries { get; set; } 

    public Database() 
    { 
     SavedEntries = new List<DatabaseEntry>(); 
    } 

    public Database(string type, string provider, string driver) 
    { 

     Name = type; 
     Driver = driver; 
     Provider = DatabaseProvider.SqlClient; 

     Provider = SetProvider(provider); 
     SavedEntries = new List<DatabaseEntry>(); 
    } 

    private DatabaseProvider SetProvider(string provider) 
    { 
     switch (provider) 
     { 
      case "OleDb": 
       return DatabaseProvider.OleDb; 
      case "SqlClient": 
       return DatabaseProvider.SqlClient; 
      default: 
       return DatabaseProvider.SqlClient; 
     } 
    } 
} 

[Serializable] 
[XmlRoot(ElementName = "DatabaseEntry", IsNullable = false, Namespace = "http://somesite.com")] 

class DatabaseEntry 

{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string Name { get; set; } 

    [XmlAttribute(AttributeName = "ConnectionString")] 
    public string ConnectionString { get; set; } 

    [XmlAttribute(AttributeName = "DsnString")] 
    public string DsnString { get; set; } 

    public DatabaseEntry() 
    { } 
} 

データベースを保存しようとしているクラスイムは、誰もが何か問題を参照してください、私は店をしようとしている親クラスであるのか?クラスをインスタンス化して保存すると、何も保存されません。何がありますか?

EDIT!使用されているコードは、保存する:

if (Settings.Default.SqlDatabase == null) 
    { 
     Settings.Default.SqlDatabase = CreateNewDatabase(); 
     Settings.Default.Save(); 
    } 

private Database CreateNewDatabase() 
{ 
    Database data = new Database("SQL Server", "SqlClient", "SQL Native Client"); 
    data.SavedEntries.Add(new DatabaseEntry() 
    { 
     Name = "Default", 
     ConnectionString = @"Hello1", 
     DsnString = @"Hello2" 
    }); 
    return data; 
} 

は、私は単にちょうどのAppSettingsにDatabaseクラスのインスタンスを保存しようとしている

+1

あなたはxmlとしてクラスを保存するために使用しているコードを投稿できますか –

+0

編集した元の投稿 – Tom

+0

opps私はあなたと同じ時間にそれを編集しました、ごめんなさい –

答えて

5
あなたは publicクラスを作ってみることができ

からXmlSerializerが、そのことについてうるさいです。

しかし、私は設定コードが型変換器にもっと関心があることを思い出しているようです。それのためにTypeConverterを書くことができますか?

+0

うん、私はそれらを公開していませんでした。ありがとう! – Tom

+0

パブリックに変更する必要があったアクセサーだけでしたか?それとも、TypeConverterも使用する必要がありましたか? – Vidar

+0

@Vidar - Tomのコメントから、私は 'public'と仮定しました。 –

関連する問題