【问题标题】:Set bool property default value to true if the property is not passed in API call [duplicate]如果属性未在 API 调用中传递,则将布尔属性默认值设置为 true [重复]
【发布时间】:2020-04-10 06:05:03
【问题描述】:

我正在使用带有 json 正文的 url https://myWebsite.com/users 进行 PUT 调用以更新用户

[{
"Name" : "John",
}]

由于我没有在json body中传递“状态”属性,所以默认设置为false,因为false是布尔数据类型的默认值。

但是,如果在进行 API 调用时没有在 json 中传递该属性,我需要将其设置为 true 作为默认值。

我尝试使用 OnDeserializing 属性如下:

   [OnDeserializing]
    void BeforeDeserialization(StreamingContext ctx)
    {
        this.Status = true;
    }

但它不起作用。

模型如下所示:

[DataContract (Namespace = "mynamespace")]
public class User
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public bool Status { get; set; }
}

请帮我解决这个问题。

【问题讨论】:

  • @PrasadTelkikar 请检查更新问题中的用户模型

标签: c# api


【解决方案1】:

如果你反序列化到一个类,那么在那个类中有一个默认为真值的 bool 成员。例如:

public class NameAndStatus
{
    public string name { get; set;}
    public bool status { get; set; } = true;  // default value of true
}

如果 status 与 json 正文一起传入,则成员将设置为传入的值。否则你会得到默认值,即true

【讨论】:

    【解决方案2】:

    让我们尝试使用DefaultValueAttribute

    【讨论】:

      【解决方案3】:

      您可以将默认值分配给布尔属性Status,例如,

      [DataContract (Namespace = "mynamespace")]
      public class User
      {
          [DataMember]
          public string Name { get; set; }
      
          [DataMember]
          public bool Status { get; set; } = true; 
                                          //^^^^^^^^ Set default value to Status property
      }
      

      这样,即使你传递了Status属性的值,默认值也会被实际值替换,否则它会将Status的值设置为true

      【讨论】:

        猜你喜欢
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 2010-10-16
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        相关资源
        最近更新 更多