【问题标题】:.NET Core API - Error converting value {null} to type 'System.Boolean'.NET Core API - 将值 {null} 转换为类型“System.Boolean”时出错
【发布时间】:2021-06-02 13:19:58
【问题描述】:

最近我们将项目从 .NET Framework 迁移到 .NET Core 3.1。

假设我们有一个属性定义为bool,当我们尝试从 UI 调用 API 时,它不接受 null 值并收到以下错误

将值 {null} 转换为类型“System.Boolean”时出错

尝试在启动时添加它以解决问题

services.AddControllers().AddJsonOptions(o =>
        {
            o.JsonSerializerOptions.PropertyNamingPolicy = null;
            o.JsonSerializerOptions.DictionaryKeyPolicy = null;
        });

【问题讨论】:

  • it's not accepting values as null 从来没有。永远不可能将null 存储在需要boolint 之类的值类型的变量或属性中。这就是引入可空类型的原因。如果属性是bool?,则只能存储null
  • 您发布的代码并没有尝试设置任何 bool 属性。这些属性需要JsonNamingPolicy 类并且do 接受空值。贴出实际导致编译错误的代码
  • @PanagiotisKanavos 我们之前使用的.NET框架不是这样的。
  • 不是哪个代码的情况吗?你发布的作品。不涉及布尔值。你从哪里得到这个错误?谷歌搜索显示这是一个 JSON.NET 错误,它 not 被 .NET Core 3.1 使用。您是否在尝试反序列化 JSON 字符串时遇到错误? json字符串是什么,目标对象是什么?发布相关代码、JSON 文本和完整的异常文本,而不仅仅是其中的一部分。可通过Exception.ToString()获取全文
  • Nullable 类型不是由 .NET Core 引入的,它们存在 几年 年。您发布的错误消息也会出现在 .NET Old 中,as this possibly duplicate question 显示。不知何故,您的 JSON 中有一个 null 值。接收它的属性必须是bool?,而不是bool。也许您修改了 JSON.NET 的 null 处理行为?

标签: .net .net-core asp.net-core-3.1


【解决方案1】:

我已经修改了启动,它对我有用。谢谢大家的建议

        services.AddControllers()
            .AddNewtonsoftJson(options =>
            {
                options.UseMemberCasing();
//This will help us in accepting null  values to other properties types
                options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
            });

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2017-06-11
    • 1970-01-01
    • 2020-08-07
    • 2013-12-15
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多