【发布时间】: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#