张德长

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

XML序列化和反序列化--XmlSerializer

用NET自带的XML序列化工具进行系列化和反序列化;

需要引用的命名空间:

using System.Xml;
using System.Xml.Serialization;

XmlSerializer serializer = new XmlSerializer(typeof(Student));
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
serializer.Serialize(stream, student);
}

对核心代码制作的数据流程图,以便于理解数据流向和工作原理;

serializer.Serialize(stream, student);

窗口设计

测试用学生类

public class Student
{
private string m_Name;
private string m_Sex;
private int m_Age;
public string Name { get => m_Name; set => m_Name = value; }
public string Sex { get => m_Sex; set => m_Sex = value; }
public int Age { get => m_Age; set => m_Age = value; }
public string Say() { return $"my name is {Name}"; }
}

将学生类进行序列化,并保存至XML文件,测试读取XML文件内容

string path = Application.StartupPath + @"\data.xml";
Student student = new Student() { Name = "孙悟空", Sex = "男", Age = 5000 };
/// <summary>
/// 序列化,并读取XML
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
XmlSerializer serializer = new XmlSerializer(typeof(Student));
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
serializer.Serialize(stream, student);
}
XmlDocument doc = new XmlDocument();
if (File.Exists(path)) doc.Load(path);
else return;
XmlNode root = doc.DocumentElement;
listBox1.Items.Add(root.InnerText);
bool b = root.HasChildNodes;
listBox1.Items.Add("root.HasChildNodes?"+b);
XmlNodeList list= root.ChildNodes;
listBox1.Items.Add("子节点个数?" + list.Count);
foreach (XmlNode item in list)
{
listBox1.Items.Add(item.InnerText);
}
}

点击加载按钮--加载XML文件并进行反序列化

/// <summary>
/// 加载XML,反序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
if (!File.Exists(path)) return;
XmlSerializer serializer = new XmlSerializer(typeof(Student));
using (FileStream stream = new FileStream(path, FileMode.Open))
{
Student student2 = serializer.Deserialize(stream) as Student;
listBox1.Items.Clear();
listBox1.Items.Add("反序列化数据");
listBox1.Items.Add("生成类型"+student2.ToString());
listBox1.Items.Add(student2.Name);
listBox1.Items.Add(student2.Sex);
listBox1.Items.Add(student2.Age);
listBox1.Items.Add("Say()" + student2.Say());
}
}

结果:

posted on   张德长  阅读(459)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示