2009-05-18 3 views
5

Voici la classe im essayant de stockerC# Paramètres de l'application ne sauvegarde en utilisant la classe personnalisée

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

base de données est la classe mère que je suis en train magasin, quelqu'un voit quelque chose de mal? Lorsque j'instancie la classe et la sauvegarde, rien n'est sauvegardé. Ce qui donne?

EDIT! Le code qui est utilisé pour enregistrer:

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

Je suis tout simplement essayer de stocker une instance d'une classe de base de données dans les AppSettings

+1

Pourriez-vous poster le code que vous utilisez pour enregistrer la classe en tant que xml –

+0

publié pour montrer comment je l'appelle – Tom

+0

opps je l'ai édité en même temps que vous avez fait, désolé à ce sujet –

Répondre

5

Vous pouvez essayer de faire les classes public-XmlSerializer est pointilleux à ce sujet . Cependant, il me semble me rappeler que le code de paramètres est beaucoup plus intéressé par les convertisseurs de type; vous pourriez essayer d'écrire un TypeConverter pour cela?

+0

yep qui l'a fait, Je ne les ai pas aussi publiques. Merci beaucoup bourgeon! – Tom

+0

Était-ce juste l'accesseur que vous deviez utiliser seul ou avez-vous également utilisé TypeConverter? – Vidar

+0

@Vidar - du commentaire de Tom, je suppose que le 'public' l'a fait. –

Questions connexes