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日

相关文章

  • .net 生成拼音码与五笔码实例代码

    针对如何实现“.NET 生成拼音码与五笔码”这个功能,我们可以采用以下两种方式。 1. 使用第三方库实现 可以使用第三方库实现该功能,比如 Pinyin4net、Microsoft Input Method Editor(IME)等。其中,Pinyin4net 是一款开源的拼音转换库,支持多种方式的拼音解析,而 Microsoft IME 是 Microso…

    C# 2023年5月31日
    00
  • ASP.NET Core Mvc中空返回值的处理方法详解

    让我来详细讲解一下关于ASP.NET Core Mvc中空返回值的处理方法。 问题描述 在ASP.NET Core Mvc中,我们在控制器方法中通常使用返回类型为ActionResult或者是ActionResult。但是在某些情况下,我们希望不返回任何数据,或者只返回HTTP状态码。这时候就需要处理空返回值的情况了。 解决方案 在ASP.NET Core …

    C# 2023年5月31日
    00
  • C#中子类调用父类的实现方法

    在C#中,我们可以使用关键字base来调用父类的实现方法。base关键字用于从派生类中访问基类的成员。以下是详细讲解“C#中子类调用父类的实现方法”的完整攻略: 1. 基础知识 在C#中,如果派生类中的方法要调用基类中的同名方法,可以使用关键字base来调用。使用base可以实现子类调用基类中的方法从而避免了代码冗余。base关键字必须放在派生类方法的内部,…

    C# 2023年5月15日
    00
  • javascript与asp.net(c#)互相调用方法

    为了实现JavaScript与ASP.NET(C#)互相调用方法,我们可以通过以下两种方法来实现: 使用Ajax调用Web API 以上方法适用于在前端JavaScript中调用后端C#方法。 首先,你需要创建一个Web API控制器,以便在后台中实现一些C#方法,然后该控制器将返回JSON数据。这些方法可以使用C#类库、数据库连接、Entity Frame…

    C# 2023年6月3日
    00
  • ListView用法中与滚动相关的需求实现

    ListView是Android中常用的控件之一,它可以显示多个数据项,使得用户可以通过上下滑动来浏览不同的数据,因此与滚动相关的需求是ListView中的重要部分,本文将对ListView的滚动相关的需求进行详细讲解。 ListView滚动相关的需求 ListView滚动相关的需求包括两种:滚动控制和滚动监听。 滚动控制需要实现以下需求: 滚动到指定位置 …

    C# 2023年6月6日
    00
  • C# Process调用外部程序的实现

    下面我来给大家详细讲解一下“C# Process调用外部程序的实现”的完整攻略。 什么是Process类 Process类是.NET Framework中一个系统级别的类,它提供了一种机制来与操作系统中运行的进程进行交互。通过使用Process类,我们可以创建、启动、停止和操纵操作系统中的进程,并且可以获取有关进程的信息。在C#中,可以通过引用System.…

    C# 2023年5月31日
    00
  • WinForm中comboBox控件数据绑定实现方法

    WinForm中的comboBox控件是一种常用的下拉选择框控件,可以让用户从预设的选项中选择一项或输入自定义内容。下面将详细介绍如何实现comboBox控件的数据绑定。 1. 绑定数据源 首先,需要将comboBox控件绑定到需要显示的数据源。可以通过WinForm设计器中的属性窗口完成这个操作。步骤如下: 步骤1:打开WinForm设计器 在Visual…

    C# 2023年6月7日
    00
  • C# 程序集和反射详解

    C#程序集和反射是C#语言中的重要概念,下面我将详细讲解它们。 C#程序集 程序集是 C# 语言的一个基本概念,它是一组可重用的代码和相关信息的集合。程序集是一种可以被其他程序重用的单元。在 Visual Studio 中,可以创建两种类型的程序集:可执行程序集和动态链接库。 在创建程序集的过程中,需要考虑程序集名称、程序集版本、程序集描述等信息。下面是创建…

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