使用Properties.Settings保存自定义类失败问题求助
自定义类型SettingsModel在Properties.Settings中保存后重启丢失的问题
问题现象
使用Properties.Settings保存bool、string等基本类型时操作正常,但将项目内自定义类ProjectName.Models.SettingsModel设为字段类型(字段名AppSettings)后,调用Save()看似成功,重启项目后AppSettings却返回null,参考相关方案后仍未解决。
相关代码:
Properties.Settings.Default.IsRemember = true; Properties.Settings.Default.AppSettings = new SettingsModel() { AccentColorItems = Settings.AccentColorItems, ThemeItems = Settings.ThemeItems, SelectedAccentColor = Settings.SelectedAccentColor, SelectedTheme = Settings.SelectedTheme, SelectedLanguage = Settings.SelectedLanguage, AppNotifications = Settings.AppNotifications, SystemNotifications = Settings.SystemNotifications, AllowAutomaticUpdating = Settings.AllowAutomaticUpdating }; Properties.Settings.Default.Save();
解决步骤
- 给自定义类添加可序列化标记:
SettingsModel必须标记[Serializable]特性,否则.NET无法将其序列化保存到配置文件。示例代码:[Serializable] public class SettingsModel { // 类属性定义 public List<AccentColor> AccentColorItems { get; set; } public List<Theme> ThemeItems { get; set; } // 其他属性... } - 检查Settings字段配置:在项目的Settings.settings设计器中,确认
AppSettings的类型是ProjectName.Models.SettingsModel,且范围设置为User(Application范围的设置为只读,无法保存修改)。 - 确保嵌套类型可序列化:如果
SettingsModel的属性包含自定义类或集合,这些嵌套类型也需要标记[Serializable];若使用自定义集合,需确保其支持序列化。 - 验证配置文件内容:保存设置后,到用户配置文件路径(通常在
C:\Users\{用户名}\AppData\Local\{公司名}\{项目名}\{版本号}下的.config文件)查看是否存在AppSettings的序列化内容,若不存在则说明序列化失败,需检查类的标记是否正确。 - 设置默认实例:在Settings设计器中,给
AppSettings设置一个默认的SettingsModel实例,避免加载失败时返回null。
内容的提问来源于stack exchange,提问作者Ozgur Saklanmaz
相关产品推荐
相关产品推荐

