当我有以下模型时:
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]
因为它不能满足第二部分。
现在如何设置它,开发人员有责任初始化属性,否则将被省略。有没有办法做到这一点,以便它只忽略反序列化而不忽略序列化?
如果我可以改写您的问题,您似乎在问,我如何拥有始终具有默认非空值的类型属性,即使在反序列化 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 ?? ""; } }
}
现在,无论 Customer
类如何构造,FirstName
和 LastName
都保证为非 null。