C# 中对象序列化XML的方法

  1. C# 中对象序列化 XML 方法概述

C# 中对象序列化 XML 的方法可以将对象以 XML 文件的形式序列化并保存在磁盘上,也可以将 XML 文件反序列化成对象。这种方法可以方便地在不同的系统之间传输数据,并且保留了对象的结构和属性。C# 中对象序列化 XML 的方法主要有以下两种:

  • 使用 XmlSerializer 类进行序列化和反序列化。
  • 使用 DataContractSerializer 类进行序列化和反序列化(需要添加 System.Runtime.Serialization 引用)。

下面分别就两种方法进行讲解。

  1. 使用 XmlSerializer 类进行序列化和反序列化

XmlSerializer 类可以将公共类型的实例序列化为 XML 文档或反序列化 XML 文档为公共类型的实例。XmlSerializer 的序列化方法必须在属性或字段上附加 XmlAttribute,XmlElement 或 SoapAttribute,因为 XmlSerializer 类序列化公共类型的公共属性和字段。示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;


namespace ConsoleApp1
{
    [XmlRoot("User")] // 序列化对象时的根元素
    public class User
    {
        [XmlAttribute("ID")] // 序列化为属性
        public int Id { get; set; }

        [XmlElement("Name")] // 序列化为元素
        public string Name { get; set; }

        [XmlElement("Age")] // 序列化为元素
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            User user1 = new User { Id = 1, Name = "Tom", Age = 20 };
            User user2 = new User { Id = 2, Name = "Cindy", Age = 24 };

            // 序列化对象到 XML 文件
            XmlSerializer serializer = new XmlSerializer(typeof(User));
            using (TextWriter writer = new StreamWriter("user.xml"))
            {
                serializer.Serialize(writer, user1);
                serializer.Serialize(writer, user2);
            }

            // 反序列化 XML 文件到对象
            XmlSerializer deserializer = new XmlSerializer(typeof(User));
            using (TextReader reader = new StreamReader("user.xml"))
            {
                User user3 = (User)deserializer.Deserialize(reader);
                Console.WriteLine("ID: {0}, Name: {1}, Age: {2}", user3.Id, user3.Name, user3.Age);
            }
        }
    }
}

示例代码中定义了一个 User 类,并使用 XmlRoot、XmlAttribute 和 XmlElement 等属性来定义序列化/反序列化时的 XML 文档格式。在 Main 方法中,创建了两个 User 对象,分别通过 XmlSerializer 实例对其进行序列化后保存在 user.xml 文件中,并通过同样的 XmlSerializer 对 user.xml 文件进行反序列化,最后将结果输出到控制台。

  1. 使用 DataContractSerializer 类进行序列化和反序列化

DataContractSerializer 类是一种更为灵活的序列化方案,可以将序列化数据输出到不同的输出流中,比如 MemoryStream、FileStream 等。同时,DataContractSerializer 也支持 LINQ to XML,因此可以轻松地与 XElement 或 XDocument 一起使用。下面是使用 DataContractSerializer 进行序列化和反序列化的示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;


namespace ConsoleApp1
{
    [DataContract]
    public class User
    {
        [DataMember]
        public int Id { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            User user1 = new User { Id = 1, Name = "Tom", Age = 20 };
            User user2 = new User { Id = 2, Name = "Cindy", Age = 24 };

            // 将对象序列化到内存流中
            MemoryStream stream1 = new MemoryStream();
            DataContractSerializer serializer1 = new DataContractSerializer(typeof(User));
            serializer1.WriteObject(stream1, user1);
            serializer1.WriteObject(stream1, user2);

            // 读取内存流并反序列化
            stream1.Seek(0, SeekOrigin.Begin);
            DataContractSerializer deserializer1 = new DataContractSerializer(typeof(User));            
            User user3 = (User)deserializer1.ReadObject(stream1);
            Console.WriteLine("ID: {0}, Name: {1}, Age: {2}", user3.Id, user3.Name, user3.Age);
        }
    }
}

示例代码中先定义了一个 User 类,并使用 DataContract 和 DataMember 等属性来定义其序列化和反序列化的规则。在 Main 方法中,创建了两个 User 对象,然后将这两个对象序列化到 MemoryStream 中。接着从 MemoryStream 中读取数据,并通过 DataContractSerializer 对其进行反序列化。最后输出反序列化后的结果到控制台。

  1. 总结

C# 中对象序列化 XML 的方法可以方便地将对象与 XML 文档进行相互转换,这样即便在不同的系统间传输数据也会更加方便。本文中介绍了两种不同的序列化方案,并且分别给出了相应的示例代码,希望读者可以借此了解和掌握更多有关 C# 中对象序列化 XML 的相关知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 中对象序列化XML的方法 - Python技术站

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

相关文章

  • C# 调用命令行执行Cmd命令的操作

    C# 调用命令行执行 Cmd 命令可以通过使用 Process 类实现。下面是具体步骤: 1. 引用命名空间 在 C# 中使用 Process 类需要引用 System.Diagnostics 命名空间,因此需要在文件头部添加以下代码: using System.Diagnostics; 2. 创建 Process 对象 创建一个 Process 对象,可以…

    C# 2023年6月7日
    00
  • C#入门学习之集合、比较和转换

    C#是一门非常流行的面向对象编程语言,它的集合、比较和转换是编程中经常使用的基本概念。本篇攻略将详细讲解C#入门学习中集合、比较和转换的应用。 集合 集合是一个包含一组对象的数据结构,C#中的集合有很多种,如List、Dictionary、HashSet、Stack等等。在使用集合前需要先导入使用的命名空间。 List List是一个非常常用的集合类型,它可…

    C# 2023年5月15日
    00
  • IIS部署ASP.NET Core项目及常见问题总结

    IIS部署ASP.NET Core项目及常见问题总结 ASP.NET Core是一个跨平台的Web应用程序框架,可以在Windows、Linux和macOS上运行。在本攻略中,我们将讨论如何在IIS上部署ASP.NET Core项目,并总结一些常见问题及其解决方案。 步骤一:安装.NET Core Runtime和.NET Core Hosting Bund…

    C# 2023年5月17日
    00
  • C#中值类型和引用类型的区别深度分析

    C#中值类型和引用类型的区别深度分析 什么是值类型和引用类型? 在C#中,数据类型分为值类型和引用类型两种。 值类型具有以下特点: 存储在栈上; 直接保存值本身; 复制操作是值的拷贝。 而引用类型则具有以下特点: 存储在堆上; 存储的是指向数据的内存地址,即引用; 复制操作只是复制了引用,不是复制数据本身。 如果一个变量存储的是值类型数据,则该变量直接保存具…

    C# 2023年5月15日
    00
  • C# AE之返回上一级和下一级的实战操作

    C# AE之返回上一级和下一级的实战操作 在C# AE(Adobe After Effects)中,返回上一级和下一级的操作非常常见,本文将详细讲解如何实现这个功能。 返回上一级 返回上一级的操作可以通过使用AE的“撤销”(Undo)功能来完成。在C#中,可以通过调用Undo()方法来实现。具体步骤如下: 导入AE的COM组件: using AE = Ado…

    C# 2023年6月7日
    00
  • JSP动态输出Excel及中文乱码的解决

    JSP动态输出Excel及中文乱码的解决 在JSP中,我们可以使用POI库动态输出Excel文件,实现数据导出的功能。但是,在输出Excel文件时,中文字符可能会出现乱码的情况。本文将详细介绍JSP动态输出Excel及中文乱码的解决方法,包括代码实现和注意事项等。 步骤一:导入POI库 要使用POI库动态输出Excel文件,我们首先需要导入POI库。POI库…

    C# 2023年5月15日
    00
  • C#根据前台传入实体名称实现动态查询数据

    C#根据前台传入实体名称实现动态查询数据 在 C# 中,我们可以运用反射技术,根据前台传入实体名称来实现动态查询数据。下面,我们就来具体讲解一下实现步骤。 步骤一:通过反射获取实体类型 我们需要根据实体名称来获取对应的实体类型。通过反射,我们可以使用 Type.GetType(string typeName) 方法来获取类型。示例代码如下: // typeN…

    C# 2023年5月31日
    00
  • C# Convert.ToBoolean()方法: 将指定的值转换为布尔值

    Convert.ToBoolean() 是 C# 中的一个静态方法,用于将给定的对象或指定数值类型的值转换为布尔值类型。 该方法的返回值类型为 bool。 该方法有以下三种重载形式: Convert.ToBoolean(bool value):直接将布尔值类型的变量转换为 bool 类型。 Convert.ToBoolean(byte value):将无符号…

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