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     }
View Code

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     }
View Code

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     }
View Code

对比表格序列化:

 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       
View Code

反序列化函数:

 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
View Code

效果图片:

转载于:https://www.cnblogs.com/IamJiangXiaoKun/p/5822147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值