簡體   English   中英

僅在Json.Net中的反序列化時忽略空值

[英]Only Ignore nulls on deserialization in 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我怎么能擁有一個總是有一個默認的非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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM