布尔字段在取消序列化后总是返回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。

是我误解了这件事,还是我做得不对?

布尔字段在取消序列化后总是返回false(Newtonsoft)

由于Admin属性是只读的-{get {...}}-序列化程序无法将其设置为任何值,将跳过它。

修复:使字段读写,即使用自动属性

public bool Admin {get;set;}

此外,您可能不需要反序列化的参数构造函数即可工作,或者使用JSON.net中所示的[JsonConstructor]属性:如何在不使用默认构造函数的情况下进行反序列化?