将XML导入数据库C#.NET核心的最佳方法

将XML导入数据库C#.NET核心的最佳方法,c#,sql,xml,.net-core,C#,Sql,Xml,.net Core,我正在从事一个项目,该项目要求我从一个我不控制的XML API中获取数据,并将该数据插入数据库(我控制),供其他应用程序使用(我控制但不能修改代码) 我们已经通过提供者的特殊端点从XMLAPI获得了完整的数据库布局,但是所有其他查询(获取数据)都是通过XML实现的 目前我所拥有的是: Book.cs-这表示一个数据库表 使用系统; 使用System.ComponentModel.DataAnnotations; 名称空间示例 { 公共部分类书 { [关键] public int Recordno

我正在从事一个项目,该项目要求我从一个我不控制的XML API中获取数据,并将该数据插入数据库(我控制),供其他应用程序使用(我控制但不能修改代码)

我们已经通过提供者的特殊端点从XMLAPI获得了完整的数据库布局,但是所有其他查询(获取数据)都是通过XML实现的

目前我所拥有的是:

Book.cs-这表示一个数据库表

使用系统;
使用System.ComponentModel.DataAnnotations;
名称空间示例
{
公共部分类书
{
[关键]
public int Recordno{get;set;}
公共小数?金额{get;set;}
公共字符串标题{get;set;}
公共字符串说明{get;set;}
公共日期时间?何时修改{get;set;}
公共日期时间?当创建{get;set;}
公共int?通过{get;set;}创建
公共int?通过{get;set;}修改
}
}
API返回XML-表示API返回的XML(SDK已经将其转换为XMLDocument类型)


1.
24.12
这是一个标题
这是一个描述
13/03/20 15:23:12
3.
1.
24.12
这是另一个标题
这是另一种描述
21/03/20 12:45:23
15/03/20 15:23:12
6.
2.
目前我们是通过switch语句来实现的,但我希望有更好的方法。 部分BookController.cs

var books=newlist();
//数据返回是一个列表
foreach(response.Data中的var结果)
{
var-xElements=result.Elements();
var book=新书();
foreach(xElements中的变量元素)
{
开关(element.Name.ToString())
{
案例“记录编号”:
book.Recordno=int.Parse(element.Value);
打破
案例“金额”:
if(element.Value!=string.Empty)
{
book.Amount=int.Parse(element.Value);
}
打破
//等等。
}
}
图书。添加(图书);
}
我有一种感觉,有一种更简单的方法可以做到这一点,我只是不知道,我担心我有大约50个表和数百个元素要做,这使得这种方法在时间上效率低下。

你可以做以下几点:

  • 用于生成类
  • 使用生成的类读取输入XML
  • 使用这些数据
  • 您可以执行以下操作:

  • 用于生成类
  • 使用生成的类读取输入XML
  • 使用这些数据

  • 欢迎来到SO欢迎来到SO使用xml序列化

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    
    namespace ConsoleApplication8
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XmlReader reader = XmlReader.Create(FILENAME);
                XmlSerializer serializer = new XmlSerializer(typeof(Books));
                Books books = (Books)serializer.Deserialize(reader);
    
    
            }
        }
        [XmlRoot("BOOKS")]
        public class Books
        {
            [XmlElement("BOOK")]
            public List<Book> books { get; set; }
        }
        public partial class Book
        {
            //[Key]
            [XmlElement("RECORDNO")]
            public int Recordno { get; set; }
            [XmlElement("AMOUNT")]
            public decimal? Amount { get; set; }
            [XmlElement("TITLE")]
            public string Title { get; set; }
            [XmlElement("DESCRIPTION")]
            public string Description { get; set; }
            private DateTime Whenmodified { get;set;}
            [XmlElement("WHENMODIFIED")]
            public string _Whenmodified {
                get { return Whenmodified.ToString("dd/MM/yy HH:mm:ss");  }
                set { DateTime.ParseExact(value,"dd/MM/yy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);}
            }
            private DateTime Whencreated { get; set; }
            public string _Whencreated
            {
                get { return Whencreated.ToString("dd/MM/yy HH:mm:ss"); }
                set { DateTime.ParseExact(value, "dd/MM/yy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); }
            }
            [XmlElement("CREATEDBY")]
            public int? Createdby { get; set; }
            [XmlElement("MODIFIEDBY")]
            public int? Modifiedby { get; set; }
        }
    
    
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    使用System.Xml;
    使用System.Xml.Serialization;
    命名空间控制台应用程序8
    {
    班级计划
    {
    常量字符串文件名=@“c:\temp\test.xml”;
    静态void Main(字符串[]参数)
    {
    XmlReader=XmlReader.Create(文件名);
    XmlSerializer serializer=新的XmlSerializer(图书的类型);
    图书=(图书)序列化程序。反序列化(读者);
    }
    }
    [XmlRoot(“书籍”)]
    公共课用书
    {
    [XmlElement(“书”)]
    公共列表书籍{get;set;}
    }
    公共部分类书
    {
    //[关键]
    [XmlElement(“记录编号”)]
    public int Recordno{get;set;}
    [XmlElement(“金额”)]
    公共小数?金额{get;set;}
    [XmlElement(“标题”)]
    公共字符串标题{get;set;}
    [XmlElement(“描述”)]
    公共字符串说明{get;set;}
    修改{get;set;}时的私有日期时间
    [XmlElement(“修改时”)]
    修改时的公共字符串\u{
    获取{returnwhenmodified.ToString(“dd/MM/yy HH:MM:ss”);}
    设置{DateTime.ParseExact(值,“dd/MM/yy HH:MM:ss”,System.Globalization.CultureInfo.InvariantCulture);}
    }
    创建{get;set;}时的私有日期时间
    创建公共字符串时\u
    {
    获取{returnwhencreated.ToString(“dd/MM/yy HH:MM:ss”);}
    设置{DateTime.ParseExact(值,“dd/MM/yy HH:MM:ss”,System.Globalization.CultureInfo.InvariantCulture);}
    }
    [XmlElement(“CREATEDBY”)]
    公共int?通过{get;set;}创建
    [XmlElement(“MODIFIEDBY”)]
    公共int?通过{get;set;}修改
    }
    }
    
    使用xml序列化

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    
    namespace ConsoleApplication8
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XmlReader reader = XmlReader.Create(FILENAME);
                XmlSerializer serializer = new XmlSerializer(typeof(Books));
                Books books = (Books)serializer.Deserialize(reader);
    
    
            }
        }
        [XmlRoot("BOOKS")]
        public class Books
        {
            [XmlElement("BOOK")]
            public List<Book> books { get; set; }
        }
        public partial class Book
        {
            //[Key]
            [XmlElement("RECORDNO")]
            public int Recordno { get; set; }
            [XmlElement("AMOUNT")]
            public decimal? Amount { get; set; }
            [XmlElement("TITLE")]
            public string Title { get; set; }
            [XmlElement("DESCRIPTION")]
            public string Description { get; set; }
            private DateTime Whenmodified { get;set;}
            [XmlElement("WHENMODIFIED")]
            public string _Whenmodified {
                get { return Whenmodified.ToString("dd/MM/yy HH:mm:ss");  }
                set { DateTime.ParseExact(value,"dd/MM/yy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);}
            }
            private DateTime Whencreated { get; set; }
            public string _Whencreated
            {
                get { return Whencreated.ToString("dd/MM/yy HH:mm:ss"); }
                set { DateTime.ParseExact(value, "dd/MM/yy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); }
            }
            [XmlElement("CREATEDBY")]
            public int? Createdby { get; set; }
            [XmlElement("MODIFIEDBY")]
            public int? Modifiedby { get; set; }
        }
    
    
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    使用System.Xml;
    使用System.Xml.Serialization;
    命名空间控制台应用程序8
    {
    班级计划
    {
    常量字符串文件名=@“c:\temp\test.xml”;
    静态void Main(字符串[]参数)
    {
    XmlReader=XmlReader.Create(文件名);
    XmlSerializer serializer=新的XmlSerializer(图书的类型);
    图书=(图书)序列化程序。反序列化(读者);
    }
    }
    [XmlRoot(“书籍”)]
    公共课用书
    {
    [XmlElement(“书”)]
    公共列表书籍{get;set;}
    }
    公共部分类书
    {
    //[关键]
    [XmlElement(“记录编号”)]
    public int Recordno{get;set;}
    [XmlElement(“金额”)]
    公共小数?金额{get;set;}
    [XmlElement(“标题”)]
    公共字符串标题{get;set;}
    [XmlElement(“描述”)]
    公共字符串说明{get;set;}
    修改{get;set;}时的私有日期时间
    [XmlElement(“修改时”)]
    修改时的公共字符串\u{
    获取{returnwhenmodified.ToString(“dd/MM/yy HH:MM:ss”);}
    set{DateTime.ParseExact(值,“dd/MM/yy HH:MM:ss”,System.Globalization.C