布尔字段在取消序列化后总是返回false(Newtonsoft)
本文关键字:false 返回 Newtonsoft 字段 取消 序列化 布尔 | 更新日期: 2023-09-27 18:26:43
我正在使用newtonsoft的json取消序列化程序,并在包装器中取消该对象的序列化:
public class User
{
public string Username;
public byte[] HashedPassword;
public byte[] Salt;
private bool admin;
public bool Admin
{
get { return admin; }
}
public User(string UsernameArg, byte[] PasswordArg, byte[] SaltArg, bool AdminArg = false)
{
Username = UsernameArg;
HashedPassword = PasswordArg;
Salt = SaltArg;
admin = AdminArg;
}
public override string ToString()
{
return Username;
}
}
这是我的json字符串:
{"Users":[{"Username":"admin","HashedPassword":"password","Salt":"salt","Admin":true}]}
(为了可读性,我编辑了散列密码和salt)
因此,每当我使用JsonConvert.DeserializeObject<UserDatabaseClass>(jsonRead)
读到这篇文章时,admin字段都会返回false。
是我误解了这件事,还是我做得不对?
由于Admin
属性是只读的-{get {...}}
-序列化程序无法将其设置为任何值,将跳过它。
修复:使字段读写,即使用自动属性
public bool Admin {get;set;}
此外,您可能不需要反序列化的参数构造函数即可工作,或者使用JSON.net中所示的[JsonConstructor]
属性:如何在不使用默认构造函数的情况下进行反序列化?