【发布时间】:2023-03-29 03:20:01
【问题描述】:
如果我有一个包含值类型属性的 DTO 类,我如何习惯性地使用 Newtonsoft 将 JSON 反序列化为我的 DTO 类,同时确保 JSON 定义值类型,可能包含该类型的 default 值?到目前为止,我看到的方法依赖于检查该值是否为 default 值,但是,当 default 值也是该属性的有效值时,这不是一个合适的解决方案。
示例
public class MyDto
{
public bool MyProp { get; set; }
}
| JSON | Can deserialize to MyDto
|
|---|---|
{"MyProp": true} |
true |
{"MyProp": false} |
true |
{} |
false |
当前解决方案
目前我使用System.ComponentModel.DataAnnotations.RequiredAttribute并将类型声明为可为空,但这仅在模型绑定期间有效(而不是任何反序列化),并导致在引用属性时过度使用!。
public class MyDto
{
[Required]
public bool? MyProp { get; set; }
}
【问题讨论】:
-
当 JSON 为
{}时,你想发生什么? -
反序列化器应该不会成功。如果是
ApiController模型,客户端应该收到 400,如果是JsonConvert调用,它应该抛出。 -
我们需要查看您的 ApiController 甚至是完全可重现的示例。否则很难弄清楚到底是什么问题。
标签: c# .net json.net deserialization json-deserialization