反序列化后,Boolean字段始终返回false(Newtonsoft)

时间:2015-12-14 20:26:17

标签: c# json json.net

我正在使用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。

是不是我误解了这里做了什么,还是我做错了?

1 个答案:

答案 0 :(得分:8)

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

修复:make field read-write,即使用自动属性

public bool Admin {get;set;}

此外,您可能需要无参数构造函数来进行反序列化以使用[JsonConstructor]属性,如JSON.net: how to deserialize without using the default constructor?

所示