c# - 无法将类型“字符串”隐式转换为“布尔”JSON
问题描述
嗨,我需要帮助从我从 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"))));
解决方案
List.Find(Predicate)的参数需要是一个Predicate,它是一个委托,它接受您正在搜索的对象的实例,并期望返回一个 bool 来指定对象是否匹配。目前,在您的内部 Find 调用的 Predicate 中,您只是返回另一个 Find 调用的结果,这是一个字符串而不是预期的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;
推荐阅读
- vue.js - v-img 在 vuetify 中显示 url 而不是图像
- java - 使用 Spring JPA 将 DTO 映射到父实体的特定子类,其中 InheritanceType.TABLE_PER_CLASS
- python-3.x - 在 Python 中使用 GeoJSON
- c++ - ++ 运算符在猜谜游戏中不起作用?
- c++ - C++ qt 应用程序编译在一个文件中
- python - 如何根据条件计算熊猫行的权重
- azure - terraform 是否支持将 WCF 中继添加到中继命名空间?
- css - 是否可以将背景图像放入 svg?
- python - 需要用列表解释奇怪的行为
- java - 以下方法的最坏情况 Big O 运行时