2009-05-18 9 views
5

Hier sind die Klasse imC# Anwendungseinstellungen Speicher nicht benutzerdefinierte Klasse mit

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

Datenbank ist die übergeordnete Klasse zu speichern versuchen, den ich versuche zu speichern, jemand etwas falsch? Wenn ich die Klasse instanziiere und sie speichere, wird nichts gespeichert. Was gibt?

BEARBEITEN! Der Code, der verwendet wird, um zu sparen:

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; 
} 

Ich bin einfach nur versuchen, eine Instanz einer Datenbank-Klasse in die AppSettings zu speichern

+1

Könnten Sie nach dem Code Sie verwenden die Klasse als XML –

+0

bearbeitet Original-Beitrag zu speichern zu zeigen, wie ich es – Tom

+0

Upps bin Aufruf ich es zur gleichen Zeit bearbeitet, wie Sie diese traurig über –

Antwort

5

Sie könnten versuchen, die Klassen machen public-XmlSerializer ist pingelig, dass .

Allerdings scheint mir, dass der Einstellungscode viel mehr in Typ-Konverter interessiert ist; Sie könnten versuchen, eine TypeConverter dafür schreiben?

+0

yep tat, die es taten, Ich hatte sie nicht als öffentlich. Vielen Dank Knospe! – Tom

+0

War es nur der Accessor, den Sie für sich selbst in Public ändern mussten, oder mussten Sie auch TypeConverter verwenden? – Vidar

+0

@Vidar - Aus Toms Kommentar gehe ich davon aus, dass es nur das "Publikum" getan hat. –

Verwandte Themen