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

时间:2014-07-21 13:01:54

标签: 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; }
}

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

{"Checked":[true,true,false,false,false,false],"Matches":null,"TestQuestionId":480,"Text":null}

我是否需要修改我的模型类,如果有可能的话 数据可能不存在,若然,我怎么能修改IList?

1 个答案:

答案 0 :(得分:3)

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

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

例如,假设您的JSON中TestQuestionId为空:

{
   "Checked": [true,true,false,false,false,false],
   "Matches": null,
   "TestQuestionId": null,
   "Text":null
}

如果您想要正确反序列化该JSON,则必须将TestQuestionId声明为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; }
}

修改

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