C# 每次运行后,在项目设置中将通用列表与自定义类一起使用将变为空
我有一个程序,它的一部分包括注册一个用户,然后用他每次注册时提供的用户名密码登录。 我知道这可以通过一个简单的数据库来完成,但我想用项目设置来代替。 我有一个用户类:C# 每次运行后,在项目设置中将通用列表与自定义类一起使用将变为空,c#,application-settings,C#,Application Settings,我有一个程序,它的一部分包括注册一个用户,然后用他每次注册时提供的用户名密码登录。 我知道这可以通过一个简单的数据库来完成,但我想用项目设置来代替。 我有一个用户类: class User { public string name { get; set; } public string username { get; set; } public string password { get; set; } public string email { get; set
class User
{
public string name { get; set; }
public string username { get; set; }
public string password { get; set; }
public string email { get; set; }
public User(string name, string username, string password, string email)
{
this.name = name;
this.username = username;
this.password = password;
this.email = email;
}
}
然后在本页使用这篇文章(来自伊斯梅尔·德加尼):
现在我创建了一个列表,这是xml部分:
<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="User">
<Value Profile="(Default)" />
</Setting>
很可能您需要将设置的范围更改为应用程序级别,而不是用户级别
<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="Application">
<Value Profile="(Default)" />
</Setting>
要在设置文件中保存和重新加载
用户
对象列表,需要将类公开,并提供一个默认(无参数)构造函数。(默认构造函数可以是私有的。)
如果该类不是公共类,则不会将数据写入设置文件
如果没有默认的无参数构造函数,数据将不会再次从文件中读取。不要以纯文本形式存储密码。请显示调用列表的代码。我不是100%确定,但可能需要(无参数)
用户
类的默认构造函数。Slaks:这不是安全问题或任何问题。它只是一个简单的程序。elgonzo:我试过了,但没有成功either@user3003613,我刚刚根据您问题中给出的代码测试了您的案例。一个没有参数的默认构造函数显然是不够的,类还需要是公共的。请参阅我的答案。谢谢,在重新运行程序后它会工作。但是,当我关闭visual studio并再次启动它时,所有数据都会消失。@user3003613,请注意,您将设置写入“用户”范围,因此这些设置会保存在用户的配置文件目录中。你确定你的应用程序是在同一个用户帐户下运行的吗?是的。但现在它可以工作了。我所要做的就是将设置属性从“从不复制”更改为“复制(如果更新)”。
private void sabtuser()
{
User newuser = new User(tb_name.Text, tb_username.Text, tb_password.Text, tb_email.Text);
Settings.Default.Users.Add(newuser);
Settings.Default.Count++;
Settings.Default.Save();
this.Close();
}
<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="Application">
<Value Profile="(Default)" />
</Setting>
public class User
{
private User() {}
public string name { get; set; }
public string username { get; set; }
public string password { get; set; }
public string email { get; set; }
public User(string name, string username, string password, string email)
{
this.name = name;
this.username = username;
this.password = password;
this.email = email;
}
}