Итак, мне удалось экспортировать файл. json путем сериализации моего списка. Теперь я пытаюсь загрузить файл. json, деэриализовать его и снова добавить в свой список. Идея состоит в том, чтобы иметь возможность нажать на импорт, выбрать файл, а затем преобразовать его, чтобы я мог добавить его в свой список. Вот функция в моем контроллере, которая не работает:
** Обновление ** Итак, теперь мне удалось преобразовать файл. json обратно в свой список, но если список пуст, и я хочу добавьте к нему новый список, тогда я получаю эту ошибку:
[HttpPost]
public async Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length == 0)
return Content("file not selected");
var path = Path.Combine(Directory.GetCurrentDirectory(), "Import", file.FileName);
using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}
String jsonImport = System.IO.File.ReadAllText(path);
Console.WriteLine(jsonImport);
List<Booking> bookings;
_cache.TryGetValue("key", out bookings);
List<Booking> newList = new List<Booking>();
newList = JsonConvert.DeserializeObject<List<Booking>>(jsonImport);
foreach (var item in newList)
{
bookings.Add(item);
_cache.Set<List<Booking>>("key", bookings);
}
return RedirectToAction("Index");
}
Итак, я хочу выбрать файл (пользователю должно быть разрешено только для загрузки. json форматировать ничего, кроме idk, как это сделать), а затем из этого. json Я хочу добавить каждую запись в свой список бронирований. Вот модель бронирования:
public class Booking
{
[Required]
[Display(Name = "Ladestand")]
[Range(0, 100)]
public double chargeState { get; set; }
[Required]
[Display(Name = "Benötigte Fahrstrecke")]
[Range(1, 1000)]
public double distance { get; set; }
[Required]
[Display(Name = "Beginn")]
public DateTime startTime { get; set; }
[Required]
[Display(Name = "Ende")]
public DateTime endTime { get; set; }
[Required]
[Display(Name = "Anschlusstyp")]
[EnumDataType(typeof(ConnectorType))]
public ConnectorType connectorType { get; set; }
}
А вот функция экспорта:
public ActionResult Export()
{
string fileName = "BookingsExport.json";
List<Booking> bookingsList;
_cache.TryGetValue("key", out bookingsList);
string json = JsonConvert.SerializeObject(bookingsList);
FileInfo file = new FileInfo(fileName);
using (StreamWriter writer = file.CreateText())
{
writer.Write(json);
}
byte[] fileBytes = System.IO.File.ReadAllBytes(fileName);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Json, fileName);
}