【问题标题】:Default numeric value from JSON property with empty string来自 JSON 属性的默认数值,带有空字符串
【发布时间】:2020-04-24 13:51:53
【问题描述】:

我正在尝试反序列化一个 JSON 字符串,其中包含一个属性的空字符串值...该属性应解析为该类的 decimal 属性...

public class myClass {
  public decimal my_value { get; set; } = 0;
}
var json = "{ \"my_value\": \"\" }";
var data = JsonConvert.DeserializeObject<myClass>(json);

问题是数据以null 对象的形式返回。

我尝试将属性设置为decimal?,这确实返回了一个对象,但是当我需要将my_value 设置为默认为0 时,nullnull

我也尝试了以下方法,但它返回一个 null 对象(使用 decimaldecimal?)...

  [System.ComponentModel.DefaultValue(0)]
  [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
  public decimal my_value { get; set; } = 0;

如果 JSON 包含属性的空字符串,我如何将其设置为默认值 0

在任何人声明之前...是的,简单的答案是在 JSON 中没有空字符串属性,但我无能为力

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您需要设置序列化设置以忽略空值。

    如果您使用的是 Newtonsoft,设置将如下所示。你可以了解更多here

    var = jsonSettings = new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    }
    

    【讨论】:

    • 我已经删除了之前的评论,因为事实证明我是个白痴......我的例子我使用 0 为简单起见......但后来我注意到实际代码正在使用decimal.MinValue 作为默认值(猜猜看,-79228162514264337593543950335)。所以谢谢你,这太棒了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2018-12-13
    • 2011-07-06
    • 2014-03-24
    • 2023-04-07
    • 2013-03-12
    • 2020-07-27
    相关资源
    最近更新 更多