C# XmlSerializer将对象序列化以及反序列化(Sqlite数据库)
获取不同数据库表信息将筛选出来的信息序列化以及反序列化
相应类结构:
Class Tables:
1 [Serializable] 2 [XmlRoot("Table")] 3 public class Tables 4 { 5 public Tables() 6 { 7 Items = new List<ColumnsItems>(); 8 } 9 10 /// <summary> 11 /// 新表名称 12 /// </summary> 13 [XmlElementAttribute("NewTableName")] 14 public string NewTableName { get; set; } 15 16 /// <summary> 17 /// 旧表名称 18 /// </summary> 19 [XmlElementAttribute("OldTableName")] 20 public string OldTableName { get; set; } 21 22 [XmlElementAttribute("Field")] 23 public List<ColumnsItems> Items { get; set; } 24 25 }
Class ColumnsItems:
1 [Serializable] 2 [XmlRoot("Field")] 3 public class ColumnsItems 4 { 5 /// <summary> 6 /// 新表字段 7 /// </summary> 8 [XmlElementAttribute("NewColumn")] 9 public string NewColumn { get; set; } 10 11 /// <summary> 12 /// 旧表字段 13 /// </summary> 14 [XmlElementAttribute("OldColumn")] 15 public string OldColumn { get; set; } 16 }
Class createXml:
1 [Serializable] 2 [XmlRoot("Tables")] 3 public class createXml 4 { 5 public createXml() 6 { 7 setTable = new List<Tables>(); 8 } 9 [XmlElementAttribute("Table")] 10 public List<Tables> setTable { get; set; } 11 }
对比表格序列化:
1 #region 将对比表格序列化 2 /// <summary> 3 /// 保存信息事件,将表中数据对应关系读取到XML文件中 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void saveInfo_Click(object sender, EventArgs e) 8 { 9 XmlDocument xd = new XmlDocument(); 10 11 // 序列化赋值对象 12 List<Tables> allTable = new List<Tables>(); 13 //Tables getTable = new Tables(); 14 //ColumnsItems columnItem = new ColumnsItems(); 15 16 // 读取字段信息 17 int i = dataGridView2.RowCount-1; 18 for (int j = 0; j < i;j++) 19 { 20 //// 21 Tables getTable = new Tables(); 22 ColumnsItems columnItem = new ColumnsItems(); 23 /// 24 if (dataGridView2.Rows[j].Cells[0].Value.ToString() != null) 25 { 26 getTable.NewTableName = dataGridView2.Rows[j].Cells[0].Value.ToString(); 27 } 28 if (dataGridView2.Rows[j].Cells[1].Value != null) 29 { 30 columnItem.NewColumn = dataGridView2.Rows[j].Cells[1].Value.ToString(); 31 } 32 if (dataGridView2.Rows[j].Cells[2].Value != null) 33 { 34 getTable.OldTableName = dataGridView2.Rows[j].Cells[2].Value.ToString(); 35 } 36 if (dataGridView2.Rows[j].Cells[3].Value != null) 37 { 38 columnItem.OldColumn = dataGridView2.Rows[j].Cells[3].Value.ToString(); 39 } 40 if (columnItem != null) 41 { 42 getTable.Items.Add(columnItem); 43 while (dataGridView2.Rows[j].Cells[0].Value == dataGridView2.Rows[j + 1].Cells[0].Value && dataGridView2.Rows[j].Cells[2].Value == dataGridView2.Rows[j+1].Cells[2].Value) 44 { 45 ColumnsItems itemTemp = new ColumnsItems(); 46 if (dataGridView2.Rows[j+1].Cells[1].Value != null) 47 { 48 itemTemp.NewColumn = dataGridView2.Rows[j + 1].Cells[1].Value.ToString(); 49 } 50 if (dataGridView2.Rows[j+1].Cells[0].Value != null) 51 { 52 itemTemp.OldColumn = dataGridView2.Rows[j + 1].Cells[3].Value.ToString(); 53 } 54 getTable.Items.Add(itemTemp); 55 j++; 56 if (j >= i) 57 { 58 break; 59 } 60 } 61 } 62 allTable.Add(getTable); 63 } 64 createXml setXml = new createXml(); 65 setXml.setTable = allTable; 66 using(StringWriter wr = new StringWriter()) 67 { 68 XmlSerializer createXml = new XmlSerializer(typeof(createXml)); 69 createXml.Serialize(wr,setXml); 70 xd.LoadXml(wr.ToString()); 71 xd.Save("c:\\1.xml"); 72 } 73 } 74 #endregion
反序列化函数:
1 #region 反序列化函数 2 /// <summary> 3 /// 反序列化函数 4 /// </summary> 5 /// <param name="xmlPath"></param> 6 /// <returns></returns> 7 public createXml Deserialize(string xmlPath) 8 { 9 XmlDocument xmlDoc = new XmlDocument(); 10 xmlDoc.Load(xmlPath); 11 try 12 { 13 using (StringReader sr = new StringReader(xmlDoc.OuterXml)) 14 { 15 XmlSerializer xmldes = new XmlSerializer(typeof(createXml)); 16 createXml getObjXml = (createXml)xmldes.Deserialize(sr); 17 return getObjXml; 18 } 19 } 20 catch (Exception) 21 { 22 throw; 23 } 24 } 25 #endregion
效果图片:
分类:
C#语言基础
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 20250116 支付宝出现重大事故 有感
· 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
· 2025 最佳免费商用文本转语音模型: Kokoro TTS
· 海康工业相机的应用部署不是简简单单!?
· 使用 pdf.js 通过文件流方式加载pdf文件