C# json разбирает строку в нескольких фигурных скобках с учетом регистра - PullRequest
1 голос
/ 30 апреля 2020

Я бы хотел разобрать с сайта: http://ddragon.leagueoflegends.com/cdn/10.9.1/data/en_US/champion.json
Используйте этот сайт для лучшего обзора. Когда я набираю Aatrox, я хотел бы получить 266

Мне удалось сделать это до сих пор, но он чувствителен к регистру. Можно ли как-нибудь получить мой код без учета регистра?

var input = new WebClient().DownloadString(@"http://ddragon.leagueoflegends.com/cdn/10.9.1/data/en_US/champion.json");
var obj = JObject.Parse(input);
var input= obj["data"]["Aatrox"]["key"];


Обновленный код

var input = new WebClient().DownloadString(@"http://ddragon.leagueoflegends.com/cdn/10.9.1/data/en_US/champion.json");
JObject json = (JObject)JsonConvert.DeserializeObject(input);
Dictionary<string, object> d = new Dictionary<string, object>(json.ToObject<IDictionary<string, object>>(), StringComparer.CurrentCultureIgnoreCase);
String f = d["data"]["Aatrox"]["key"].ToString();

Он все еще не работает.

1 Ответ

0 голосов
/ 30 апреля 2020

Я думаю, что вы можете использовать словарь вместо анонимного объекта, посмотрите этот ответ

Обновление:

    public class InsensitiveWrapper
    {
        private readonly JObject _rWrapped;
        private readonly string _rLeafValue;

        public InsensitiveWrapper(JObject jsonObj)
        {
            _rWrapped = jsonObj ?? throw new ArgumentNullException(nameof(jsonObj));
        }

        private InsensitiveWrapper(string value)
        {
            _rLeafValue = value ?? throw new ArgumentNullException(nameof(value));
        }

        public string Value => _rLeafValue ?? throw new InvalidOperationException("Value can be retrieved only from leaf.");

        public InsensitiveWrapper this[string key]
        {
            get
            {
                object nonTyped = _rWrapped.GetValue(key, StringComparison.OrdinalIgnoreCase);
                if (nonTyped == null)
                    throw new KeyNotFoundException($"Key {key} is not found.");


                JObject jObject = nonTyped as JObject;
                if (jObject == null)
                    return new InsensitiveWrapper(nonTyped.ToString());

                return new InsensitiveWrapper(jObject);
            }
        }
    }

    public static async Task Main()
    {
        var input = new WebClient().DownloadString(@"http://ddragon.leagueoflegends.com/cdn/10.9.1/data/en_US/champion.json");
        JObject json = (JObject)JsonConvert.DeserializeObject(input);

        var dictionary = new InsensitiveWrapper(json);

        var val = dictionary["data"]["Aatrox"]["key"].Value;

        Console.WriteLine(val);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...