如何允许我的 WebAPI 模型接受空值?

Sam*_*tar 4 c# asp.net asp.net-mvc asp.net-web-api

我有以下模型类:

public class UserData
{
    public IList<bool> Checked { get; set; }
    public IList<int> Matches { get; set; }
    public int TestQuestionId { get; set; }
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

来自我客户的数据如下所示:

{"Checked":[true,true,false,false,false,false],"Matches":null,"TestQuestionId":480,"Text":null}
Run Code Online (Sandbox Code Playgroud)

如果某些数据可能不存在,我是否需要修改我的模型类?如果是这样,我该如何修改 IList ?

Yuv*_*kov 6

如果您尝试反序列化的字段是Value Type,并且您的 JSON 表示其null,那么您需要将其更改为Nullable字段。

如果作为 null 传输的值是引用类型,则无需更改任何内容,因为引用类型可以为 null。反序列化 JSON 时,该值将保持为 null。

例如,假设TestQuestionIdJSON 中为 null:

{
   "Checked": [true,true,false,false,false,false],
   "Matches": null,
   "TestQuestionId": null,
   "Text":null
}
Run Code Online (Sandbox Code Playgroud)

如果您想正确反序列化该 JSON,则必须声明TestQuestionId为 a Nullable<int>,如下所示:

public class UserData
{
    public IList<bool> Checked { get; set; }
    public IList<int> Matches { get; set; }
    public int? TestQuestionId { get; set; }
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编辑

为了简单明了:值类型(int、uint、double、sbyte 等)不能分配空值,这就是Nullable<T>发明(AKA Nullable Types)的原因。引用类型(字符串、自定义类)可以分配空值。