JSON.NET JObject ключевое сравнение без учета регистра
Я использую Newtonsoft Json.net для разбора строки JSON. Я конвертирую строку в JObject. Когда доступ к значению элемента по ключу, я хочу, чтобы сравнение было нечувствительным к регистру. В приведенном ниже коде я использую "ОТ" в качестве ключа. Я хочу, чтобы в строке json [ "FROM" ] возвращалась строка "1". ToString(). Но это терпит неудачу. Можно ли сделать код ниже?
String ptString = "{from: 1, to: 3}";
var json = (JObject)JsonConvert.DeserializeObject(ptString);
String f = json["FROM"].ToString();
Ответы
Ответ 1
С# позволяет использовать словари с ключами, которые нечувствительны к регистру, поэтому обходной путь, который я использовал, - это преобразование JObject в словарь с набором StringComparer.CurrentCultureIgnoreCase
, например:
JObject json = (JObject)JsonConvert.DeserializeObject(ptString);
Dictionary<string, object> d = new Dictionary<string, object>(json.ToObject<IDictionary<string, object>>(), StringComparer.CurrentCultureIgnoreCase);
String f = d["FROM"].ToString();
Ответ 2
Это должно работать:
string json = @"{UPPER: 'value'}";
JObject o = JObject.Parse(json);
var value = o.GetValue("upper", StringComparison.OrdinalIgnoreCase)?.Value<string>();