Как поместить объект, который я получаю от ввода, в массив JSON?

#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);  }