当我有以下型号时:
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: ''
// }
基本上,我不希望值为null,但我也不想要求用户在请求中添加可选参数。我无法使用[Require]
因为它不能满足第二部分。
现在如何设置开发人员有责任初始化属性,否则将省略它。有没有办法实现这一点,以便它只忽略反序列化而不是序列化?
答案 0 :(得分:0)
如果我可以改写你的问题,你似乎在问,如果反序列化JSON,即使设置为null
,我怎么能拥有一个总是有一个默认的非空值的属性?或者在应用程序代码中未初始化时?如果这个改述是正确的,那么可以通过使用显式而不是自动属性来处理类型本身:
public class Customer
{
string firstName = "";
string lastName = "";
public Customer() { }
public string FirstName { get { return firstName; } set { firstName = value ?? ""; } }
public string LastName { get { return lastName; } set { lastName = value ?? ""; } }
}
无论FirstName
类如何构建, LastName
和Customer
现在都保证为非空。