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



当我有以下模型时:

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 类如何构造,FirstNameLastName 都保证为非 null。

相关内容

  • 没有找到相关文章

最新更新