【问题标题】:Cannot implicently convert type 'string' to 'bool' JSON无法将类型“字符串”隐式转换为“布尔”JSON
【发布时间】:2021-09-30 04:00:39
【问题描述】:

您好,我需要帮助从我从 aJSON 文件创建的对象列表中查找值:

JSON 结构:

{
    "mp": "1",
    "mpuus": [
      {
        "id": "100",
        "tpuus": [
          "000000001",
          "000000002"
        ]
      },
      {
        "id": "101",
        "tpuus": [
          "00000003"
        ]
      }
    ]
  },
  {
    "mp": "2",
    "mpuus": [
      {
        "id": "200",
        "tpuus": [
          "0000004"
        ]
      }
    ]
  },

我将 JSON 转换为

 RootMedicationMapping object.
List<rootMedicationMapping> = JsonHandler.DeserializeJasonArrayFromFile<RootMedicationMapping>(@"JSON File PATH");

我想通过tpuu值搜索rootMedicationMapping列表,得到mp值。

例如我传递的值是 tpuu = 000000002,我想取回 mp 值(本例中为 1)

我正在尝试下面的语法,但它正在抛出我

'无法将类型'string'隐式转换为'bool'

var mpId= rootMedicationMapping.Find(x => x.MPUUs.Find(y=>y.Tpuus.Find(z=>z.Equals("tpuu value"))));

【问题讨论】:

  • 问:你能发帖RootMedicationMapping吗?听起来您已将 mp 声明为“bool”......但您的 JSON 显然将其用作“字符串”。 JSON 中的合法“布尔”值肯定会包括 true(不带引号),可能包括 1(不带引号)......但绝对NOT "1"

标签: c# json linq


【解决方案1】:

List.Find(Predicate) 的参数必须是 Predicate,它是一个委托,它接受您正在搜索的对象的实例,并期望返回一个布尔值,指定对象是否匹配。目前,在您的内部 Find 调用的谓词中,您只是返回另一个 Find 调用的结果,它是一个 string 而不是预期的 bool,从而导致错误你看到了。

要解决这个问题,您只需要确保 Predicate 参数返回 bool。有了你所拥有的,你可以添加检查内部 Find 调用是否返回 null

var mpId = 
    rootMedicationMapping.Find(x => 
        x.MPUUs.Find(y => 
            y.Tpuus.Find(z => 
                z.Equals("tpuu value")) != null) != null)?.mp;

您也可以使用 LINQ 编写此代码,允许由 Any 处理空检查:

var mpId = 
    rootMedicationMapping.FirstOrDefault(x => 
        x.MPUUs.Any(y => 
            y.Tpuus.Any(z => 
                z.Equals("tpuu value"))))?.mp;

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多