【问题标题】:converting json bool values to C# bool values将 json bool 值转换为 C# bool 值
【发布时间】:2020-02-12 20:38:30
【问题描述】:

我正在尝试将 json 布尔值字符串转换为 C# 等效项。这是我的代码:

  string jsonResponseString = "{boolvalue:'true'}";
  dynamic jsonResponse = JsonConvert.DeserializeObject(jsonResponseString);

  if (jsonResponse.boolvalue == true){
    Console.WriteLine("yes it is bool");
  }
  else{
    Console.WriteLine("no it is still a string");
  }

不幸的是,boolvalue 仍然是字符串 "true" 而不是 bool true。因为我在运行时不知道我得到什么样的 obkect 字符串,所以我想避免使用 DeserializeObject<type> 进行显式类型转换。我觉得我错过了一些明显的东西。将字符串 bool 转换为实际 bool 值的正确方法是什么?

【问题讨论】:

  • if (jsonResponse.boolvalue == "true")检查类型,值字面上是一个字符串,所以你的检查需要检查相同的类型。如果你真的检查值类型,它是一个string
  • 如果你真的不能提前知道,像bool b = jsonResponse switch { bool bb => bb, "true" => true, "false" => false, _ => throw new NoGoAwayThatsJustWrongException() } 这样的东西就可以了。 (虽然Convert.ChangeType 是另一种选择,但我强烈反对这样做,因为它会应用各种令人兴奋的意外转换。bool.Parse 是一种选择,但也是其中一种方法,其作用略高于罐头上的广告。)跨度>

标签: c#


【解决方案1】:

JSON 字符串中的 json 值实际上是字符串 true。要将其解析为布尔值,您应该通过删除引号将其声明为布尔值:

string jsonResponseString = "{boolvalue: true}";

【讨论】:

  • 谢谢。我只是将其用作示例。我的现实是,json 出现在它周围没有 ' 字符的地方。碰巧的是,我正在提交从动态到布尔的类型转换,这导致了错误(未在问题中显示)。再次感谢,你给了我一些思考和寻找其他地方的问题。
猜你喜欢
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多