Я работаю над проектом, который требует, чтобы я взял данные из API XML, который я не контролирую, и вставил эти данные в базу данных (я контролирую) для потребления другим приложением (я контролирую, но могу Не изменяйте и код)
Нам уже удалось получить полный макет базы данных из API XML через специальную конечную точку провайдера, но все другие запросы (для получения данных) выполняются через XML.
В настоящее время у меня есть следующее:
Book.cs - представляет одну из таблиц базы данных
using System;
using System.ComponentModel.DataAnnotations;
namespace Example.Models
{
public partial class Book
{
[Key]
public int Recordno { get; set; }
public decimal? Amount { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime? Whenmodified { get; set; }
public DateTime? Whencreated { get; set; }
public int? Createdby { get; set; }
public int? Modifiedby { get; set; }
}
}
API Return XML - это представляет XML, возвращенный API (SDK уже преобразует его в тип XMLDocument)
<BOOKS>
<BOOK>
<RECORDNO>1</RECORDNO>
<AMOUNT>24.12</AMOUNT>
<TITLE>This is a title</TITLE>
<DESCRIPTION>This is a description</DESCRIPTION>
<WHENMODIFIED></WHENMODIFIED>
<WHENCREATED>13/03/20 15:23:12</WHENCREATED>
<CREATEDBY>3</CREATEDBY>
<MODIFIEDBY></MODIFIEDBY>
</BOOK>
<BOOK>
<RECORDNO>1</RECORDNO>
<AMOUNT>24.12</AMOUNT>
<TITLE>This is another title</TITLE>
<DESCRIPTION>This is another description</DESCRIPTION>
<WHENMODIFIED>21/03/20 12:45:23</WHENMODIFIED>
<WHENCREATED>15/03/20 15:23:12</WHENCREATED>
<CREATEDBY>6</CREATEDBY>
<MODIFIEDBY>2</MODIFIEDBY>
</BOOK>
</BOOKS>
В настоящее время мы делаем это с помощью операторов switch, но я Я надеюсь, что есть лучший метод. Partial BookController.cs
var books = new List<Book>();
// response.Data return is a List<XElement>
foreach (var result in response.Data)
{
var xElements = result.Elements();
var book = new Book();
foreach (var element in xElements)
{
switch (element.Name.ToString())
{
case "RECORDNO":
book.Recordno = int.Parse(element.Value);
break;
case "AMOUNT":
if (element.Value != string.Empty)
{
book.Amount = int.Parse(element.Value);
}
break;
// etc.
}
}
books.Add(book);
}
У меня такое ощущение, что есть гораздо более простой способ сделать это, о котором я просто не подозреваю, меня беспокоит то, что у меня около пятидесяти таблиц и сотни элементов, делающих этот метод неэффективным по времени.