将XML导入数据库C#.NET核心的最佳方法
我正在从事一个项目,该项目要求我从一个我不控制的XML API中获取数据,并将该数据插入数据库(我控制),供其他应用程序使用(我控制但不能修改代码) 我们已经通过提供者的特殊端点从XMLAPI获得了完整的数据库布局,但是所有其他查询(获取数据)都是通过XML实现的 目前我所拥有的是: Book.cs-这表示一个数据库表将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
使用系统;
使用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个表和数百个元素要做,这使得这种方法在时间上效率低下。你可以做以下几点:
欢迎来到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