【问题标题】:C# Application Settings not saving using custom classC# 应用程序设置不使用自定义类保存
【发布时间】:2009-05-18 21:26:28
【问题描述】:

这是我试图存储的类

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

Database 是我正在尝试存储的父类,有人发现有什么问题吗?当我实例化类并保存它时,什么都没有保存。什么给了?

编辑!用于保存的代码:

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 中

【问题讨论】:

  • 你能把你用来保存类的代码发布为xml
  • 编辑了原始帖子以显示我如何称呼它
  • 哎呀,我和你在同一时间编辑了它,对此感到抱歉

标签: c# class settings appsettings


【解决方案1】:

您可以尝试让课程 public - XmlSerializer 对此很挑剔。

但是,我似乎记得设置代码对类型转换器更感兴趣;您可以尝试为它写一个TypeConverter 吗?

【讨论】:

  • 是的,我没有公开它们。非常感谢芽!
  • 只是访问器必须自己更改为 Public 还是必须使用 TypeConverter?
  • @Vidar - 根据 Tom 的评论,我认为只有 public 做到了。
  • @Vidar - 它可能嵌套在另一个非公共类型中吗?您能否定义“无法正常工作” - 任何特定的错误消息?
  • 从 Settings.Default.Foo 返回的值始终为空 - 我不知道为什么 - 我确实有一个字段标记为 [NonSerialized()] 但我不认为这应该有任何效果。
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2018-08-04
  • 2012-10-13
相关资源
最近更新 更多