ASP.NET Core —上传.json文件并转换为List
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET Core —上传.json文件并转换为List相关的知识,希望对你有一定的参考价值。
因此,我设法通过序列化列表导出了.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);
}
答案
[您需要初始化列表,然后再尝试向其中添加新项目。
var bookings = new List<Booking>();
另一答案
这是因为如果您在缓存中没有值,它将把值null
设置为bookings
。您需要像下面这样进行更改:
List<Booking> bookings;
var flag = _cache.TryGetValue("key", out bookings);
if(!flag)
{
bookings = new List<Booking>();
}
以上是关于ASP.NET Core —上传.json文件并转换为List的主要内容,如果未能解决你的问题,请参考以下文章