c#正反序列化XML文件示例(xml序列化)

下面请认真阅读以下完整攻略。

c#正反序列化XML文件示例(xml序列化)

什么是XML序列化?

XML序列化是一种将对象统一保存为XML格式并在需要时将XML信息还原成对象的技术。在C#中,可以使用System.Xml.Serialization命名空间中的类来实现XML序列化和反序列化。

XML序列化的基本过程

1. 定义要序列化的对象

在C#中,需要将一个对象序列化为XML格式,首先需要定义这个对象,并在类声明处添加[Serializable]标记,如下所示:

[Serializable]
public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

2. 创建XmlSerializer对象

创建XmlSerializer对象时需要传入要序列化的对象类型作为参数。

XmlSerializer serializer = new XmlSerializer(typeof(Student));

3. 将对象序列化为XML文件

通过XmlSerializer对象的Serialize方法将要序列化的对象转换为XML格式并保存到文件中。

Student student = new Student() { Name = "Tom", Age = 18, Gender = "Male" };
using (FileStream fs = new FileStream("student.xml", FileMode.Create))
{
    serializer.Serialize(fs, student);
}

4. 将XML文件反序列化为对象

通过XmlSerializer对象的Deserialize方法,将XML文件还原成对象。

using (FileStream fs = new FileStream("student.xml", FileMode.Open))
{
    Student deserializedStudent = (Student)serializer.Deserialize(fs);
    Console.WriteLine($"Name:{deserializedStudent.Name}, Age:{deserializedStudent.Age}, Gender:{deserializedStudent.Gender}");
}

示例1:将List序列化为XML文件并读取

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

[Serializable]
public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(List<Student>));
        List<Student> students = new List<Student>()
        {
            new Student(){Name="Tom",Age=18,Gender="Male"},
            new Student(){Name="Lucy",Age=17,Gender="Female"}
        };

        //序列化为XML文件并保存
        using (FileStream fs = new FileStream("students.xml", FileMode.Create))
        {
            serializer.Serialize(fs, students);
        }

        //从XML文件中读取序列化的数据并反序列化为对象列表
        using (FileStream fs = new FileStream("students.xml", FileMode.Open))
        {
            List<Student> deserializedStudents = (List<Student>)serializer.Deserialize(fs);
            foreach (var student in deserializedStudents)
            {
                Console.WriteLine($"Name:{student.Name}, Age:{student.Age}, Gender:{student.Gender}");
            }
        }
    }
}

示例2:使用XmlWriter和XmlReader实现XML序列化

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

[Serializable]
public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        List<Student> students = new List<Student>()
        {
            new Student(){Name="Tom",Age=18,Gender="Male"},
            new Student(){Name="Lucy",Age=17,Gender="Female"}
        };

        //将对象序列化为XML文本
        using (TextWriter writer = new StringWriter())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Student>));
            serializer.Serialize(writer, students);
            Console.WriteLine(writer.ToString());
        }

        //将XML文本反序列化为对象列表
        using (TextReader reader = new StringReader("<?xml version=\"1.0\" encoding=\"utf-16\" ?><ArrayOfStudent xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><Student><Name>Tom</Name><Age>18</Age><Gender>Male</Gender></Student><Student><Name>Lucy</Name><Age>17</Age><Gender>Female</Gender></Student></ArrayOfStudent>"))
        {
            List<Student> deserializedStudents = new List<Student>();
            XmlReader xmlReader = XmlReader.Create(reader);
            while (xmlReader.Read())
            {
                if (xmlReader.Name == "Student" && xmlReader.IsStartElement())
                {
                    Student student = new Student()
                    {
                        Name = xmlReader.GetAttribute("Name"),
                        Age = int.Parse(xmlReader.GetAttribute("Age")),
                        Gender = xmlReader.GetAttribute("Gender")
                    };
                    deserializedStudents.Add(student);
                }
            }
            foreach (var student in deserializedStudents)
            {
                Console.WriteLine($"Name:{student.Name}, Age:{student.Age}, Gender:{student.Gender}");
            }
        }
    }
}

以上就是关于c#正反序列化XML文件的示例和攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#正反序列化XML文件示例(xml序列化) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • DataGridView控件显示行号的正确代码及分析

    DataGridView控件显示行号的正确代码及分析 DataGridView控件是Windows Form应用程序中最常用的数据显示控件之一。由于在处理大量数据时,通常需要知道每一行数据的编号,因此给DataGridView控件加上行号是很有必要的。下面是实现DataGridView控件显示行号的正确代码及分析。 步骤一:添加行号列 首先,我们需要为Dat…

    C# 2023年5月15日
    00
  • 改进c# 代码的五个技巧(一)

    当我们编写C#代码时,既希望代码功能完善,也希望代码运行速度和内存占用量方面尽可能优化。在这篇文章中,我们会介绍五个技巧,可以帮助你改进C#代码的质量。 技巧一:使用StringBuilder代替String 使用String类型声明的变量在处理文本时会创建一个新的字符串对象,如果需要在原始字符串上添加字符,则需要使用连接符+。这样使用+连接字符串会导致系统…

    C# 2023年5月15日
    00
  • C#正则表达式匹配与替换字符串功能示例

    C#正则表达式匹配与替换字符串功能示例 什么是正则表达式? 正则表达式是一种强大的文本匹配工具,它可以用来匹配、搜索和替换文本中符合特定模式的字符串。在C#中,可以使用System.Text.RegularExpressions命名空间下的正则表达式类来操作正则表达式。 正则表达式语法 以下是常用的正则表达式语法: 语法 说明 . 匹配任意单个字符 \d 匹…

    C# 2023年6月7日
    00
  • C#中DataTable删除行的方法分析

    下面是针对“C#中DataTable删除行的方法分析”的完整攻略: 1. DataTable概述 DataTable是C#中常用的表示二维表格数据的类型,它可以通过添加行和列的方式来构建数据表结构,并支持对数据表中的数据进行增删改查等操作。在使用DataTable时,我们经常需要对表格中的一些行进行删除操作,接下来就介绍几种常用的DataTable删除行的方…

    C# 2023年5月15日
    00
  • Unity实现车型识别的示例代码

    下面就是Unity实现车型识别的完整攻略。 环境准备 在开始前,请确保你已经按照Unity开发的常规流程,搭建好了开发环境。并且已经安装好了Vuforia引擎,可以顺利地在Unity 中进行二维码识别、3D 模型跟踪等处理操作。 示例1:车型识别的基本实现 1.创建识别库: 在Vuforia的开发者后台中,创建一个识别库,可以使用目标生成器(Target M…

    C# 2023年6月3日
    00
  • 使用MSScriptControl 在 C# 中读取json数据的方法

    使用MSScriptControl 在 C# 中读取json数据的方法,可以分为以下几个步骤: 1. 引入MSScriptControl组件 首先,需要在C#项目中引入MSScriptControl组件,方法如下: 在项目中右键点击“引用” 在弹出的“引用管理器”窗口中,点击“程序集”选项卡,然后点击“浏览”按钮 在弹出的文件选择窗口中,找到并选中MSScr…

    C# 2023年6月1日
    00
  • C#中动态数组用法实例

    C#中动态数组用法实例 什么是动态数组 在C#中,数组是一种固定长度的数据结构,一旦确定长度就无法改变。而动态数组则是一种长度可以随着数据的增加自动扩容的数组。 C#中实现动态数组的常用方式是使用List类,该类可以随时添加或删除元素,而不需要手动管理数组容量。 使用List类 创建一个List对象 List<int> myList = new …

    C# 2023年5月31日
    00
  • C#中ArrayList的使用方法

    下面是对于“C#中ArrayList的使用方法”的详细讲解攻略。 什么是ArrayList ArrayList是C#中的一个集合类,它可以用来存储任何类型的对象,并且具有动态增长和缩减的功能。ArrayList内部以数组的形式实现,它可以在不指定大小的情况下自动增加容量,以便能够容纳新元素。 创建ArrayList对象 可以使用以下语法创建ArrayList…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部