我正在使用newtonsoft的json deserialiser,我在包装器中反序列化了这个对象:
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}]}
(我已经编辑了哈希密码和盐以便于阅读)
因此,每当我使用JsonConvert.DeserializeObject<UserDatabaseClass>(jsonRead)
阅读此内容时,管理字段都会返回false。
是不是我误解了这里做了什么,还是我做错了?
答案 0 :(得分:8)
由于您的Admin
属性为只读 - {get {...}}
- 序列化程序无法将其设置为任何值,因此会跳过它。
修复:make field read-write,即使用自动属性
public bool Admin {get;set;}
此外,您可能需要无参数构造函数来进行反序列化以使用[JsonConstructor]
属性,如JSON.net: how to deserialize without using the default constructor?