将XML转换为实体
需求
将XML文件中的数据经过转换后插入到数据库中。
参考
C#实体类和XML的相互转换
https://blog.csdn.net/pan_junbiao/article/details/82938027
遇到的问题
错误描述
XML反序列化出错,XML 文档(2, 2)中有错误
解决方案
在实体类的字段要加上XmlElement属性
https://www.cnblogs.com/wuyunblog/p/6625747.html
具体实例
实体类和XML转换的帮助类
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7 using System.Xml.Serialization;
8
9 namespace conDealXML
10 {
11 public static class XmlSerializeHelper
12 {
13
14 /// <summary>
15 /// 将实体对象转换成XML
16 /// </summary>
17 /// <typeparam name="T">实体类型</typeparam>
18 /// <param name="obj">实体对象</param>
19 public static string XmlSerialize<T>(T obj)
20 {
21 try
22 {
23 using (StringWriter sw = new StringWriter())
24 {
25 Type t = obj.GetType();
26 XmlSerializer serializer = new XmlSerializer(obj.GetType());
27 serializer.Serialize(sw, obj);
28 sw.Close();
29 return sw.ToString();
30 }
31 }
32 catch (Exception ex)
33 {
34 throw new Exception("将实体对象转换成XML异常", ex);
35 }
36 }
37
38 /// <summary>
39 /// 将XML转换成实体对象
40 /// </summary>
41 /// <typeparam name="T">实体类型</typeparam>
42 /// <param name="strXML">XML</param>
43 public static T DESerializer<T>(string strXML) where T : class
44 {
45 try
46 {
47 using (StringReader sr = new StringReader(strXML))
48 {
49 XmlSerializer serializer = new XmlSerializer(typeof(T));
50 return serializer.Deserialize(sr) as T;
51 }
52 }
53 catch (Exception ex)
54 {
55 throw new Exception("将XML转换成实体对象异常", ex);
56 }
57
58 }
59 }
60 }
实体类
1 using System;
2 using System.Xml.Serialization;
3 namespace Model
4 {
5 /// <summary>
6 /// 功能: 实体类 (权限)
7 /// 创建人:CodeSmith
8 /// 创建日期:2019/12/25
9 /// </summary>
10 [Serializable]
11 [XmlRoot(ElementName = "Action")]
12 public partial class Action
13 {
14 public Action()
15 { }
16 #region Model
17 /// <summary>
18 /// 权限ID
19 /// </summary>
20 public short? ActionID {get; set;}
21 /// <summary>
22 /// 权限名字
23 /// </summary>
24 public string Name {get; set;}
25 /// <summary>
26 /// 权限标志代码(用于功能的判定)
27 /// </summary>
28 public string Code {get; set;}
29 /// <summary>
30 /// 权限的路径
31 /// </summary>
32 public string Url {get; set;}
33 /// <summary>
34 /// 排序
35 /// </summary>
36 public short? Sort {get; set;}
37 /// <summary>
38 /// 权限类型
39 /// </summary>
40 public int? ActionType {get; set;}
41 /// <summary>
42 /// 备注
43 /// </summary>
44 public string Memo {get; set;}
45 /// <summary>
46 /// 审核状态
47 /// </summary>
48 public short? Check {get; set;}
49 /// <summary>
50 /// 添加时间
51 /// </summary>
52 public DateTime? InsertTime {get; set;}
53 /// <summary>
54 /// 修改时间
55 /// </summary>
56 public DateTime? ModifyTime {get; set;}
57 #endregion
58 }
59 }
XML文件
1 <?xml version="1.0" encoding="gb2312"?>
2 <MyConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3 <Roles>
4 <Role>
5 <Actions>
6 <Action>
7 <ActionID>133</ActionID>
8 <Name>用户查询</Name>
9 <Code>041303</Code>
10 <Url>/AddValue/addvalue_list</Url>
11 <Sort>4</Sort>
12 <ActionType>0</ActionType>
13 <Check>1</Check>
14 <InsertTime>2019-12-24T11:18:00</InsertTime>
15 <ModifyTime xsi:nil="true" />
16 </Action>
17 </Actions>
18 <Menus>
19 <Menu>
20 <MenuID>165</MenuID>
21 <Title>用户管理</Title>
22 <ParentID>160</ParentID>
23 <Layer>4</Layer>
24 <Path>0/1/3/160</Path>
25 <Sort>12</Sort>
26 <Url>http://</Url>
27 <Image>http://</Image>
28 <IsVip>false</IsVip>
29 <MenuType>0</MenuType>
30 <Level>0</Level>
31 <Check>1</Check>
32 <InsertTime>2019-12-21T09:21:00</InsertTime>
33 <ModifyTime>2019-12-21T09:23:00</ModifyTime>
34 </Menu>
35 </Menus>
36 <RoleID></RoleID>
37 <Name>超级管理员</Name>
38 </Role>
39 <Role>
40 </Role>
41 </Roles>
42 </MyConfig>
控制台程序,执行转换的过程
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Xml;
7
8 namespace conDealXML
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 XmlDocument doc = new XmlDocument();
15 doc.Load("Roles.Config");
16
17 XmlNode xn_MyConfig = doc.SelectSingleNode("MyConfig");
18 XmlNodeList xnl_Roles = xn_MyConfig.ChildNodes;
19 XmlNode xn_Roles_Roles = xnl_Roles[0];
20 XmlNodeList xnl_Roles_Role = xn_Roles_Roles.ChildNodes;
21 XmlNode xn_Role_Admin = xnl_Roles_Role[0];//第一个Role,为超级管理员
22 XmlNodeList xnl_Role_Admin = xn_Role_Admin.ChildNodes;
23 foreach (XmlNode item in xnl_Role_Admin)
24 {
25 if (item.Name == "Actions")
26 {
27 XmlNodeList xnl_Actions = item.ChildNodes;//获取到所有的Action
28 foreach (XmlNode xn in xnl_Actions)
29 {
30 Model.Action model = XmlSerializeHelper.DESerializer<Model.Action>(xn.OuterXml);
31 new DAL.Action().Add(model);
32 }
33 }
34 if (item.Name == "Menus")
35 {
36 XmlNodeList xnl_Menus = item.ChildNodes;//获取到所有的Action
37 foreach (XmlNode xn in xnl_Menus)
38 {
39 Model.Menu model = XmlSerializeHelper.DESerializer<Model.Menu>(xn.OuterXml);
40 new DAL.Menu().Add(model);
41 }
42 }
43 }
44
45 Console.ReadKey();
46 }
47 }
48 }
将XML转换为实体的更多相关文章
- XML与 实体的相互转化
using System; using System.Linq; using System.Xml; using System.Reflection; using System.Data; using ...
- XML外部实体(XXE)注入详解
###XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Ex ...
- Pikachu-XXE(xml外部实体注入漏洞)
XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...
- 【XXE学习】XML外部实体注入
一.XML外部实体注入介绍 1.1 XXE简介 XML外部实体注入(XML External Entity Injection)也就是人们(mian shi guan )常说的XXE啦,见名知意,就是 ...
- c# XML和实体类之间相互转换(序列化和反序列化)[砖]
link: http://blog.okbase.net/haobao/archive/62.html by: 好饱 我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlU ...
- C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- XML转换为对象操作类详解
//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...
- 三层架构中bll层把datatable转换为实体model的理解
看了很多人的项目,很多都是用到三层架构,其中BLL层中有一种将DataTable转换为实体的方法.一直没有明白为啥要这样做,今天特意去搜索了一下,如果没有答案我是准备提问,寻求解答了.还好找到一个相关 ...
- XML转换为Map通用算法实现 Java版本(Stax实现)
目前项目中需要将XML转换为Map,下面给出了自己的代码实现. 后续将为大家提供Dom版本的实现. 请各路大神给予各种优良实现. 场景: 在项目中需要解析XML文本字符串,需要将XML文本字符串映射为 ...
随机推荐
- 考研数学数一公式整理(微积分&线性代数&概率统计)
主要根据李永乐老师的线性代数讲义.全书和汤家凤老师的高数讲义整理的. 用于记背数学需要背的公式和步骤,概念.定义.公式多,方法步骤少(毕竟太庞杂了). 本来是自用,但还是分享一下,希望有补充指正! 链 ...
- 等待多线程完成的CountDownLatch(带示例)
开始磨刀霍霍向多线程了,这期是 CountDownLatch 的一个小示例. 定义:CountDownLatch 允许一个或多个线程等待其他线程完成操作. 应用需求举例:假设有4个线程,A.B.C.D ...
- moviepy音视频剪辑VideoClip类to_mask方法、to_RGB、afx方法
☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑VideoClip类to_mask方法和to_RGB方法用于进行剪辑内容变换. 1.to_mask方法 to_mask方法返回一个由调 ...
- moviepy音视频剪辑:moviepy中的剪辑相关类及关系
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 y在 ...
- PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<windows下使用pyinstaller将多个目录的Pyt ...
- Python正则表达式处理的组是什么?
在学习正则表达式处理开始阶段,对于匹配对象的group数据没有理解,查了资料进行验证测试,终于理解了. 组其实与组匹配模式相关,就是在匹配的正则表达式中使用小括号"()"括起来的任 ...
- 【Vue】 axios同步执行多个请求
问题 项目中遇到一个需求,在填写商品的时候,选择商品分类后,加载出商品分类的扩展属性. 这个扩展属性有可能是自定义的数据字典里的单选/多远. 要用第一个axios查询扩展属性,第二个axios 从第一 ...
- [BJDCTF2020]ZJCTF,不过如此 php伪协议, preg_replace() 函数/e模式
转自https://www.cnblogs.com/gaonuoqi/p/12499623.html 题目给了源码 <?php error_reporting(0); $text = $_GET ...
- 学习笔记:插头DP
基于连通性的状压DP问题. 一般是给你一个网格,有一些连通性的限制. 例题 插头DP模板 链接 题意:网格图,去掉一些点,求哈密顿回路方案数. 一般按格递推(从上到下,从左到右). 每个格子要从四个方 ...
- 题解-CF1140E Palindrome-less Arrays
CF1140E Palindrome-less Arrays \(n\) 和 \(k\) 和 \(n\) 个数的序列 \(a\).把 \(a\) 中的 \(-1\) 替换成 \([1,k]\) 之间的 ...