List 未保存在 settings.settings 中

本文关键字:settings 存在 保存 myClass List | 更新日期: 2023-09-27 18:33:09

我正在尝试将List<T>保存到项目的设置文件中。

我已经编辑了设置.settings文件并添加了

<Setting Name="CustomTabs" Type="System.Collections.Generic.List&lt;CustomTabItem&gt;" Scope="User">
      <Value Profile="(Default)" />
</Setting>

并编辑了设置设计器.cs

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public global::System.Collections.Generic.List<CustomTabItem> CustomTabs {
    get {
        return ((global::System.Collections.Generic.List<CustomTabItem>)(this["CustomTabs"]));
    }
    set {
        this["CustomTabs"] = value;
    }
}

因此,列表类型在设置-gui中可用。

现在,如果我Properties.Settings.Default.CustomTabs.Add(tab);列表被填满,但是如果我调用Save();并重新启动应用程序,列表将再次为空。

我是否缺少使其工作的东西?我正在使用Visual Studio 2015。

List<myClass> 未保存在 settings.settings 中

您不必更改设置。设置文件

尝试移除该设置

<Setting Name="CustomTabs" Type="System.Collections.Generic.List&lt;CustomTabItem&gt;" Scope="User">
      <Value Profile="(Default)" />
</Setting>

从设置.设置文件

此外,请记住在应用程序启动期间读回存储的"自定义选项卡"设置值。

编辑:2即使像下面这样更改设置.settings文件也不会造成伤害:

<Setting Name="myTestDataList" Type="System.Collections.Generic.List&lt;TestData&gt;" Scope="User">
      <Value Profile="(Default)" />
    </Setting>

示例应用程序仍能够在下次应用程序启动期间检索以前的数据。

编辑:我做了一个示例应用程序:

在设置中手动添加在下面设置。设计师.cs

[global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("")]
        public System.Collections.Generic.List<TestData> myTestDataList
        {
            get
            {
                return ((System.Collections.Generic.List<TestData>)(this["myTestDataList"]));
            }
            set
            {
                this["myTestDataList"] = value;
            }
        }

我的数据类

public class TestData
    {
        public string A {get; set;}
        public string B { get; set; }
    }

按钮-1:存储数据

private void button1_Click(object sender, EventArgs e)
        {
            List<TestData> myList = new List<TestData>();
            myList.Add(new TestData() { A = "Str1", B = "Str2" });
            myList.Add(new TestData() { A = "Str3", B = "Str4" });
            Properties.Settings.Default["myTestDataList"] = myList;
            Properties.Settings.Default.Save();
        }

button-2:即使在下次应用程序运行期间也能检索数据

private void button2_Click(object sender, EventArgs e)
{
    List<TestData> myList = Properties.Settings.Default["myTestDataList"] as List<TestData>;
}