Newtonsoft Json.NET没有使用null检查反序列化getter

时间:2017-07-24 05:45:45

标签: json.net asp.net-core-webapi

我有一个 ASP.NET Core MVC Web API 应用程序。控制器有一个POST动作,它接受一个简单的对象,如下所示:

public async Task<IActionResult> Post([FromBody] SimpleObj o) {
    return await base.Post(o);
}

public class SimpleObj {
    private Record _record;
    public Record Record { get => _record ?? new Record();  set => _record = value; }
}

public class Record {
    public string Key { get; set; }
    public string Value { get; set; }
}

如果我使用 JSON 有效负载发送 HTTP POST 请求:

{
    "record": {
        "key": "Test1",
        "value": "Passed"
    }
}

控制器的 POST 操作中收到的SimpleObj,我希望它的记录属性设置为Key = "Test1"Value = "Passed"。但我发现其记录属性已设置为 null

如果我将代码从get => _record ?? new Record();更改为get => _record;,如果我改为使用public Record Record { get; set; } = new Record();,那么它可以正常工作。我可以看到 JSON 中的Record部分已正确反序列化到记录属性中,该属性已设置为Key = "Test1",{{1} }!

但是代码Value = "Passed"意味着当检索记录时,如果它为null,则创建一个默认的Record对象,它应该影响序列化而不是反序列化,为什么Json.NET不处理这个适当的反序列化? (我正在使用Newtonsoft.Json 9.0.1

0 个答案:

没有答案