【发布时间】:2016-08-31 14:21:48
【问题描述】:
当我有以下模型时:
public class Customer
{
public Customer()
{
FirstName = string.Empty;
LastName = string.Empty;
}
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
public string FirstName {get;set;}
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
public string LastName {get;set;}
}
这在我发布数据时非常有用:
// {
// firstName: null,
// lastName: null
// }
public int Post([FromBody]Customer customer)
{
var firstName = customer.FirstName; // <-- value is ""
}
这样做的问题是,如果开发者忘记在这个系统中初始化数据,那么响应结构就会将其遗漏:
public Customer
{
FirstName = "";
}
// {
// firstName: ''
// }
基本上,我不希望这些值为空,但我也不希望用户在请求中添加可选参数。我不能使用[Require],因为它不满足第二部分。
现在如何设置它是开发人员的责任来初始化属性,否则它将被省略。有没有办法做到这一点,让它只忽略反序列化而不是序列化?
【问题讨论】:
-
如果你改用
Include会发生什么?文档指出,如果它为 null 并且使用了Ignore,它将在反序列化时将其排除:newtonsoft.com/json/help/html/… -
@RickyHartmann 本质上,我只想将 Include 用于序列化,因此我的所有属性都保证存在,但在反序列化时忽略,因此如果调用者将属性显式设置为 null,它不会覆盖默认值。
标签: c# serialization asp.net-web-api json.net asp.net-web-api2