#c_sharp #json #словари
В общем, дело обстоит так: нужно получать данные о карте игры с сервера. Сервер возвращает JSON- строку, в которой есть массив из словарей. Выглядит это примерно вот так: {"response":{"map_width":80,"map_height":80,"map_sp":5541,"objects":[{"type":1,"health":100},{"type":1,"health":100},{"type":1,"health":100},{"type":1,"health":100},{"type":1,"health":100}]} Я могу спокойно получить все данные, кроме objects. Объявление массива словарей такое: public System.Collections.Generic.Dictionary[] Field_Params;. Попытка получения данных из массива Field_Params This_Field.Field_Params[0]["type"] безуспешна т.к. я не могу обратиться к конкретному словарю. Помогите, пожалуйста. Либо с тем, как получить данные из конкретного словаря в массиве, либо как лучше десериализовать возвращаемую сервером строку. Код скрипта, который получает данные с сервера: using System.Net; using Newtonsoft.Json; using UnityEngine; using System.Collections.Generic; public class Web_Queries : MonoBehaviour // Класс Веб- запросов { public class Web_Field // Поле с данными, получаемыми с сервера { // Ответ с сервера [JsonProperty("response")] public Dictionary [] Response; // Ответ с сервера [JsonProperty("debug")] public string Description; } public Web_Field Get (string Url) // Get- запрос { // Объявляем новый экземпляр класса Web_Field Web_Field New_WF = new Web_Field(); // Проверка подлинности сертефиката сайта ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; string Common_Response; // Создание нового объекта класса using (var Connection = new WebClient()) { // Запрос на сайт Common_Response = Connection.DownloadString(Url); } New_WF = JsonConvert.DeserializeObject (Common_Response); // Вернуть ответ с сервера return New_WF; } }
Ответы
Ответ 1
Вариант 1: Возьмем ваш JSON и прогоним его через этот сайт. В ответ получаем структуру необходимых классов для грамотной десериализации JSON. Я смотрю у вас стоит JSON.NET, поэтому используем его, десериализируем строку в наш объект: var json = JsonConvert.DeserializeObject(file);. Дальше без проблем можно получить доступ ко всему, что нам необходимо, например циклом пройтись по все данным из objects. В итоге получаем что то вроде: public class Object { public int type { get; set; } public int health { get; set; } } public class Response { public int map_width { get; set; } public int map_height { get; set; } public int map_sp { get; set; } public List
Комментариев нет:
Отправить комментарий