Use ready-made parsers. Reading JSON search or regular expressions is not a good idea. For example, the Value property is not required to go to the Name property, it can go after it. The meaning of JSON will not change, and it will be difficult to catch all such cases when searching.
Json.NET supports such a thing as JSONPath queries:
var json = @"{ ""Editions"": {}, ""ItemType"": 5, ""Capabilities"": { ""Capabilities"": [ { ""Name"": ""Π’ΠΈΡΠ°ΠΆ"", ""Value"": ""20000"", ""AdditionalProperties"": {} }, { ""Name"": ""aaaa"", ""Value"": ""bbb"", ""AdditionalProperties"": {} } ] } }"; var obj = JObject.Parse(json); var value = (string)obj.SelectToken("$.Capabilities.Capabilities[?(@.Name == 'Π’ΠΈΡΠ°ΠΆ')].Value");
If JSON is really huge and de -serializes its entire memory overhead, you will have to use JsonTextReader , deserializing only small parts of the file (the code is approximate, without checks):
string value = null; using (var reader = new JsonTextReader(new StringReader(json))) { // ΡΠΈΡΠ°Π΅ΠΌ json, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΠΌ Π² ΠΎΠ±ΡΠ΅ΠΊΡ Capabilities while (reader.Read()) { if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "Capabilities") { break; } } reader.Read(); // ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌ Π² JObject while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { var obj = JObject.Load(reader); if ((string)obj["Name"] == "Π’ΠΈΡΠ°ΠΆ") { value = (string)obj["Value"]; break; } } } }