ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-11 00:32:38  阅读:139  来源: 互联网

标签:XML -- Items listBox1 Add Student new 序列化


用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());
            }

        }

结果:

标签:XML,--,Items,listBox1,Add,Student,new,序列化
来源: https://www.cnblogs.com/zhangdezhang/p/16128285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有