我试图从我的Angular应用程序发送一个XML文件到我的ASP .Net Core控制器。我想让控制器接收文件,然后将其反序列化为一个强类型的对象列表。正确的方法是什么?目前,当文件被反序列化时,我收到了一个错误,该错误显示 "根级别的数据无效,第1行,位置1"。第1行,位置1'。以下是我目前所尝试的方法。
控制器。
[HttpPost("reconciliation")]
public async Task<IActionResult> SetReconciliation(IFormFile file)
{
List<ReconciliationExportCsv> records = new List<ReconciliationExportCsv>();
XmlSerializer serializer = new XmlSerializer(typeof(List<ReconciliationExportCsv>));
using (var reader = new StreamReader(file.OpenReadStream()))
{
records = (List<ReconciliationExportCsv>)serializer.Deserialize(reader);
}
var submitted = await _service.UploadReconciliationData(records);
return Ok();
}
}
模型:
public class ReconciliationExportCsv
{
public string or1 { get; set; }
public string exitStatus { get; set; }
public string vendorState { get; set; }
}
}
CSV:
我建议你 read
流阅读器,然后将它们转换为 XElement
种类:
public async Task<IActionResult> SetReconciliation(IFormFile file)
{
List<ReconciliationExportCsv> records = new List<ReconciliationExportCsv>();
using (var reader = new StreamReader(file.OpenReadStream()))
{
var csvFile = await reader.ReadToEndAsync();
string[] filelines = csvFile.Split(new string[] { "\r\n" }, StringSplitOptions.None).Skip(1).ToArray();
filelines = filelines.Take(filelines.Count() - 1).ToArray();
var xml = new XElement("TopElement",
filelines.Select(line => new XElement("CsvItem",
line.Split(',').Select((column, index) => new XElement("Column" + index, column)))));
records = xml.Descendants("CsvItem").Select(item => new ReconciliationExportCsv()
{
or1 = (string)item.Element("Column0"),
exitStatus = (string)item.Element("Column1"),
vendorState = (string)item.Element("Column2")
}).ToList();
}
var submitted = await _service.UploadReconciliationData(records);
return Ok();
}