下面是一个使用ASP.NET Core MVC从文件中读取对象列表并验证的解决方法,包含了代码示例:
首先,创建一个用于存储对象数据的模型类,例如Person.cs
:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
接下来,创建一个用于处理文件读取和验证的控制器,例如HomeController.cs
:
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
public class HomeController : Controller
{
// GET: /Home/Index
public IActionResult Index()
{
return View();
}
// POST: /Home/Upload
[HttpPost]
public IActionResult Upload()
{
var file = Request.Form.Files[0]; // 获取上传的文件
if (file.Length > 0)
{
using (var reader = new StreamReader(file.OpenReadStream()))
{
var json = reader.ReadToEnd(); // 读取文件内容
var persons = JsonConvert.DeserializeObject>(json); // 反序列化为Person对象列表
// 对列表进行验证
foreach (var person in persons)
{
if (string.IsNullOrEmpty(person.Name) || person.Age <= 0)
{
ModelState.AddModelError("", "无效的数据");
return View("Index");
}
}
// 如果验证通过,可以在这里进行其他操作
// 例如将对象列表传递给视图显示,或者保存到数据库
return View("Success", persons);
}
}
ModelState.AddModelError("", "请选择一个文件");
return View("Index");
}
}
在HomeController
中,Index
方法用于显示上传文件的表单页面,Upload
方法用于处理表单提交的文件。在Upload
方法中,首先获取上传的文件,然后使用StreamReader
读取文件内容,再使用JsonConvert.DeserializeObject
将文件内容反序列化为Person
对象列表。接下来,对列表进行验证,如果验证失败就返回Index
视图并显示错误消息,如果验证通过则可以进行其他操作,例如将对象列表传递给视图显示或保存到数据库。
最后,在视图文件Index.cshtml
中,创建一个表单用于上传文件:
@model YourNamespace.Person
这样,当用户选择并上传一个文件后,HomeController
的Upload
方法将会被调用,文件内容将被读取并进行验证,然后根据验证结果返回相应的视图。
注意:为了使上述代码能够正常运行,你需要在项目中安装Newtonsoft.Json
包,可以通过NuGet包管理器或者在.csproj
文件中添加
来进行安装,其中x.x.x
是具体的版本号。