首页 > 解决方案 > C# 通过 REST 接受 null 或字符串

问题描述

我有一个接受简单类的 API

public class MyPayload
{
 public string Id {get;set;}
 public JsonElement Payload {get;set;}
}

有效负载的 Id 告诉后端要创建什么类,而 json Payload 是要传递的数据。我们正在从基本上是脚本化的解决方案转换到这个 API。有时传入的数据会采用以下 json 的形式:

{
 "key":null
}

在脚本解决方案中,我们可以非常简单地处理 null,并将所提供键的默认值传回。切换到 API 的问题是“key”有一个类型、字符串、int 或 bool,但是当它被传递到 API 时会发生什么我收到以下错误消息:

The JSON value could not be converted to System.Boolean. Path: $.Key | LineNumber: 5 | BytePositionInLine: 38.

我尝试的其中一件事是使用 [JsonIgnore(Condition = JsonIgnoreCondition.Never)],实际上我使用了所有的 ignorecondition 选项。基本上,当“key”== null 时,输出中省略了“key”,而不是预期的默认值。我已经尝试了几件事,但是由于值是 null 而不是类型或任何失败的东西。

好的,我正在编辑它,因为当我最初写它时我遗漏了一些重要信息,或者可能不是很清楚。API 引用了另一个项目,其中包含我通过 json 有效负载创建的类。这些是引发上述错误的类。为清楚起见,我将发布该课程的两个不同版本,以便大家可以看到我尝试过的内容。

在下面的第一个类中抛出错误。

public class MyClass
{
  public string? Key {get;set;} = "default value";
  public bool? IsThing {get;set;} = false;
}

在这种情况下,将传递 null,但不使用默认值,并且有几个版本的 JsonIgnoreCondition 完全省略了属性。

public class MyClass
{
  [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
  public string? Key {get;set;} = "default value";
  [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
  public bool? IsThing {get;set;} = false;
}

以下更新的类遵循来自@ismail 的旧样式getter/setter。为简洁起见,我将其缩短为单个属性。

public class MyClass
{
  private bool? _IsThing; 
  public bool? IsThing
  {
   get
   {
    if (_IsThing == null)
    {
     // Default Value
     return true;
    }
    else
    {
     return _IsThing;
    }
   }
   set
   {
    if (value == null)
    {
     // Default Value
     _IsThing = true;
    }
    else
    {
     _IsThing = value;
    }
   }
  }
}

感谢您的关注!

标签: c#system.text.json

解决方案


推荐阅读