反序列化只读变量

时间:2015-10-01 13:16:30

标签: c# json.net

我有这样的课程:

public class Pussy {
    public readonly int Meows;

    [JsonConstructor]
    private Pussy() { }

    public Pussy(int meows)
    {
        this.Meows = meows;
    }
}

当我尝试使用Json.NET对其进行序列化时,它运行正常:

{"Meows":3}

但是在反序列化时,只需创建Meows设置为0的课程。

怎么了?如何解决?

2 个答案:

答案 0 :(得分:3)

尝试将[JsonProperty] public readonly int Meows; 属性用于只读字段

JsonConstructor

[JsonConstructor] public Pussy(int meows) 属性为非默认ctor。

{{1}}

答案 1 :(得分:1)

反序列化程序通常采用请求的类型,并使用反射检查可公开设置的字段和属性。

您的字段不可公开设置,因此在反序列化期间不会写入。

要解决此问题,请删除readonly修饰符。

或者你可以create a custom resolver和/或writes to readonly fields使用反射的序列化器。