web-dev-qa-db-fra.com

Comparaison des clés JSON.NET JObject insensible à la casse

J'utilise Newtonsoft Json.net pour analyser la chaîne JSON. Je convertis la chaîne en JObject. Lorsque vous accédez à la valeur de l'élément par la clé, je veux que la comparaison soit insensible à la casse. Dans le code ci-dessous, j'utilise "FROM" comme clé. Je veux qu'il renvoie la chaîne "1" à la ligne json ["FROM"]. ToString (). Mais ça échoue. Est-il possible de faire fonctionner le code ci-dessous?

String ptString = "{from: 1, to: 3}";
var json = (JObject)JsonConvert.DeserializeObject(ptString);

String f = json["FROM"].ToString();
35
Jeffrey

c # vous permet d'utiliser des dictionnaires avec des clés qui ne respectent pas la casse, donc une solution de contournement que j'ai utilisée consiste à convertir le JObject en un dictionnaire avec StringComparer.CurrentCultureIgnoreCase set, comme ceci:

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();
10
ForeverWintr

Cela devrait fonctionner:

string json = @"{UPPER: 'value'}";
JObject o = JObject.Parse(json);
var value = o.GetValue("upper", StringComparison.OrdinalIgnoreCase)?.Value<string>();
99