拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何避免.NETWebAPI中的空决议错误(没有Newtonsoft)

如何避免.NETWebAPI中的空决议错误(没有Newtonsoft)

白鹭 - 2022-03-25 2144 0 0

我有一个通过 POST 接收 JSON 的 webapi。有时一个双精度值可能会以空值到达,所以像这样

class A
{
    public double val {get; set;}
}

那么传入的 json 可能是 { "val": null }

我收到决议错误,因为 null 不能应用于 double。在过去的日子里,我会添加这个

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

来自 Newtonsoft 库。但是我现在使用 System.Text.Json。有没有类似的东西?我什么也没找到。在一个地方我在这里使用它

[System.Text.Json.Serialization.JsonConverter(typeof(MyJsonConverter))]

但这对于单个双值来说似乎有点矫枉过正。

顺便说一句:如果可能的话,我想避免设定双空值,否则我将不得不.GetValueOrDefault()在多个地方使用,这看起来很难看

uj5u.com热心网友回复:

由于您加载的资料可以提供可为 null 的值,因此将属性型别设定为 是有意义的double?您可以GetValueOrDefault()通过修改 getter 以在值为 时立即回传默认值来解决null

这个问题可能是重复的;但是,由于代表较低,我无法将其标记为这样。这是我发现的一个类似问题:How to deal with nullable reference types with System.Text.Json?

以下是我找到的其他链接:

  • https://www.conradakunga.com/blog/handling-null-and-empty-strings-with-system-text-json/
  • https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.ignorenullvalues?view=net-6.0

uj5u.com热心网友回复:

好吧,恐怕这不是您想要的方式。

可能的选择——

  1. 使您的财产本身可以为空 [应该在理想情况下完成]。

    • 你已经推迟了。
  2. 在 JSON 序列化选项中使用IgnoreNullValues选项:

  • 但是,此选项的缺点是它还会在序列化期间从回应文本中洗掉空属性(即它们的名称)。其中,我想您想为您的客户端/UI 应用程序做些什么。

在我看来,您不应该允许您的 API 接受属性不接受的值(例如,double 型别属性为 null)。

因此,您需要将属性更改为可为空或使用自定义转换器来处理您的特定场景。

uj5u.com热心网友回复:

如果您不想使用无错误的序列化程序,只需让您的属性可以为空,并在代码中的其他地方为您制造另一个问题

 public double? val {get; set;}

或尝试此解决方法

   [JsonPropertyName("val")]
    public double? _value { private get; set; }

    public double Val
    {
        get { return _value == null ? 0 : (double)_value; }

        set { _value = value; }
    }
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *