我有将转换为JArray的响应。但是由于区分大小写,我无法获取这些值。我正在使用字段Unknown
,但由于响应即将到来UnKnown
,所以得到的结果为空。
var jlist = JArray.Parse(response);
reasonId = jlist.FirstOrDefault(i => i.Value<string>("AbsentReasonCD").Contains("Unknown"))
.Value<string>("AbsentReasonId");
这是我的数据
{
"AbsentReasonId": 121,
"AbsentReasonCD": "UnKnown"
}
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用IndexOf
来代替,它会产生comparer的重载:
i.Value<string>("AbsentReasonCD")
.IndexOf("Unknown", StringComparison.InvariantCultureIgnoreCase) != -1
答案 1 :(得分:0)
在检查之前,您可以尝试将字符串改小写:
var jlist = JArray.Parse(response);
reasonId = jlist.FirstOrDefault(i => i.Value<string>("AbsentReasonCD")
.ToLower().Contains("unknown")).Value<string>("AbsentReasonId");
答案 2 :(得分:0)
如果要查找不区分大小写的方式与{em> {em> {em>}匹配的 Unknown
元素,可以将String.Equals与StringComparison.InvariantCultureIgnoreCase
参数一起使用:
var jlist = JArray.Parse(response);
var reasonId = jlist.FirstOrDefault(i =>i.Value<string>("AbsentReasonCD")
.Equals("Unknown",StringComparison.InvariantCultureIgnoreCase))
.Value<string>("AbsentReasonId");
或
var jlist = JArray.Parse(response);
var mode = StringComparison.InvariantCultureIgnoreCase;
var reasonId = jlist.FirstOrDefault(i =>i.Value<string>("AbsentReasonCD")
.Equals("Unknown",mode))
.Value<string>("AbsentReasonId");
Equals
将在遇到第一个不匹配项后立即返回falses
。另一方面,Contains
或IndexOf
必须扫描整个字符串,因为Unknown
可能出现在字符串的中间或结尾。