仅在Json.Net中的反序列化时忽略空值

时间:2016-05-05 17:25:45

标签: c# serialization asp.net-web-api json.net asp.net-web-api2

当我有以下型号时:

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]因为它不能满足第二部分。

现在如何设置开发人员有责任初始化属性,否则将省略它。有没有办法实现这一点,以便它只忽略反序列化而不是序列化?

1 个答案:

答案 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类如何构建,

LastNameCustomer现在都保证为非空。