我有一个 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 )