c# - 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;
}
}
}
}
感谢您的关注!
解决方案
推荐阅读
- python - 在 Python 中操作不同的方法是否有不同的名称(或分类)?
- node.js - Node.js Exec 未在带有 MAC 的 Visual Studio Code 上运行
- java - 我们可以在子类中修改父成员变量或方法的访问修饰符吗?
- python - 与 MongoDB 搜索相比,在巨大的列表中搜索非常慢
- python - Python Beautifulsoup 找不到 HTML 数据的文本
- powershell - 必须是一种更清洁的方式
- docker - 无法解析主机:Docker for Mac
- java - 如何停止从 Maven 扩展构建
- api - API 服务如何限制没有密钥的调用?
- javascript - 在 .submit() 和 fetch(method: 'POST') 之后使用 GET 请求刷新页面