#c# #arrays #json #object #config
Вопрос:
Я делаю консольное приложение для прогнозирования погоды. Я спрашиваю пользователя, хотят ли они сохранить местоположение ввода. Когда они вводят долготу и широту, они сохраняются в файле JSON, поэтому позже(со второй попытки) они могут просто выбрать город из списка. Проблема в том, что когда объект city сохраняется в файле JSON, он не находится в массиве, поэтому позже я не получаю отображаемый список.
Программа.cs
//saving city objcet in JSON file if (userLoc == 1) { IConfiguration citConfiguration = new Configuration("cities.json"); var CitiesConfig = new City() { Id = 1, CityName = $"{weatherInfo.Timezone}", Lng = weatherInfo.Longitude, Lat = weatherInfo.Latitude }; citConfiguration.SetConfigs(CitiesConfig); }
City.cs
using Weather.PCL.Models.Abstractions; using Configs.Models.Abstractions; namespace Weather.PCL.Models.Implementations { public class City : ICity, IConfig { public int Id { get; set; } public string CityName { get; set; } public double Lng { get; set; } public double Lat { get; set; } } }
настройка конфигурации
public bool SetConfigs(IConfig config) { try { using (StreamWriter sw = new StreamWriter(_path)) { var json = JsonConvert.SerializeObject(config); sw.Write(json); sw.Close(); return true; } } catch (Exception ex) { return false; } }
отображение списка городов в файле JSON
var citiesJson = configuration.GetConfigs(); var citiesArray = JsonConvert.DeserializeObjectlt;City[]gt;(citiesJson); foreach (var item in citiesArray) { Console.WriteLine(item.Id ". " item.CityName); }
Когда я запускаю проект, я получаю исключение Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'Weather.PCL.Models.Implementations.City[]'
Что я могу сделать?
Комментарии:
1. Вы десериализуете объект в массив… предоставьте json для окончательного ответа
2. json пуст в начале
3. Ваш json должен быть
[]
таким, если вы хотите, чтобы он был пустым. Этого не может быть {}
Ответ №1:
Ваша строка JSON не содержит массива JSON . Убедитесь, что ваша строка JSON выглядит следующим образом: [{"aaa":"a1","bbb":"b1","ccc":null},{"aaa":"a2","bbb":"b2","ccc":null}]
Комментарии:
1. он сохраняет новый город только в том случае, если файл JSON пуст, так что это не поможет
2. Ошибка, которую вы получаете, указывает именно на то, что я говорю, но это зависит от вас, конечно, хотите верьте, хотите нет.:)
Ответ №2:
Вместо одного города вы должны создать множество городов
var CitiesConfig = new City[] { new City { Id = 1, CityName = $"{weatherInfo.Timezone}", Lng = weatherInfo.Longitude, Lat = weatherInfo.Latitude } };
писать
public bool SetConfigs(City[] config) { try { using (StreamWriter sw = new StreamWriter(@"cities.json")) { var json = JsonConvert.SerializeObject(config); sw.Write(json); sw.Close(); return true; } } catch (Exception ex) { return false; } }
и проверить
string json = string.Empty; using (StreamReader r = new StreamReader(@"cities.json")) json = r.ReadToEnd(); var citiesArray = JsonConvert.DeserializeObjectlt;City[]gt;(json); foreach (var item in citiesArray) { Console.WriteLine(item.Id ". " item.CityName); }