忽略JArray C#中的大小写

时间:2018-09-17 14:02:45

标签: c# json

我有将转换为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"
  }

我该如何解决这个问题?

3 个答案:

答案 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.EqualsStringComparison.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。另一方面,ContainsIndexOf必须扫描整个字符串,因为Unknown可能出现在字符串的中间或结尾。