C#序列化与反序列化(Serialize,Deserialize)实例详解

C#序列化与反序列化(Serialize,Deserialize)实例详解

序列化是什么?

序列化是将对象转换为字节序列的过程。在C# 中,可以使用序列化将指定的对象转换为 XML 或二进制格式的数据。

序列化的作用

序列化主要用于对象的持久化存储,网络通讯等领域。在对象的持久化存储中,可以将对象转换为二进制格式或 XML 格式的数据,存储在磁盘上。在网络通讯中,可以将对象转换为二进制格式或 XML 格式的数据,传输到网络中的其他计算机上。

C#中的序列化

在C# 中,可以使用 System.Runtime.Serialization 命名空间中的 DataContractSerializer 对象对对象进行序列化。使用序列化功能的步骤如下:

  1. 先定义一个需要序列化的类
[DataContract]
public class User
{
    [DataMember]
    public string Name { get; set; }

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

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

上述代码定义了一个 User 类,包含了 Name、Age、Address 三个属性,并使用了 DataContract 和 DataMember 属性进行标记。

  1. 使用 DataContractSerializer 对象进行序列化
using System.Runtime.Serialization;

public static string Serialize(object obj)
{
    string result = string.Empty;
    using (MemoryStream memoryStream = new MemoryStream())
    {
        DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
        serializer.WriteObject(memoryStream, obj);
        memoryStream.Position = 0;
        using (StreamReader streamReader = new StreamReader(memoryStream))
        {
            result = streamReader.ReadToEnd();
        }
    }
    return result;
}

上述代码演示了一个将对象序列化为 XML 字符串的示例。

  1. 使用 DataContractSerializer 对象进行反序列化
using System.Runtime.Serialization;

public static object Deserialize(string xml, Type type)
{
    object result = null;
    if (!string.IsNullOrEmpty(xml))
    {
        using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
        {
            DataContractSerializer serializer = new DataContractSerializer(type);
            result = serializer.ReadObject(memoryStream);
        }
    }
    return result;
}

上述代码演示了一个将 XML 字符串反序列化为对象的示例。

示例说明

示例1

// 定义一个 User 实例
User user = new User
{
    Name = "John",
    Age = 18,
    Address = "北京市海淀区"
};

// 序列化为 XML 字符串
string xml = Serialize(user);
Console.WriteLine(xml);

上述代码演示了如何将一个 User 对象序列化为 XML 字符串,并将结果打印出来:

<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/SerializeDemo">
  <Address>北京市海淀区</Address>
  <Age>18</Age>
  <Name>John</Name>
</User>

示例2

// 反序列化为 User 实例
User user2 = Deserialize(xml, typeof(User)) as User;
Console.WriteLine("Name:{0}, Age:{1}, Address:{2}", user2.Name, user2.Age, user2.Address);

上述代码演示了如何将一个 XML 字符串反序列化为 User 对象,并打印对象的属性值:

Name:John, Age:18, Address:北京市海淀区

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#序列化与反序列化(Serialize,Deserialize)实例详解 - Python技术站

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

相关文章

  • C# String.Join()方法: 将一个字符串数组的所有元素连接成一个字符串

    C#中的String类拥有Join()方法,它是用来连接字符串数组中的所有元素,返回一个新的字符串。下面是该函数的定义和使用方法: string.Join(string separator, params object[] values) 其中,参数separator是一个字符串,用于分割数组中的元素;参数values是object类型的数组,表示被连接的字…

    C# 2023年4月19日
    00
  • .Net Core WebApi部署到Windows服务器上的步骤

    部署.NET Core WebApi到Windows服务器上的步骤如下: 在Windows服务器上安装.NET Core运行时环境。 在Windows服务器上安装IIS。 在Windows服务器上安装ASP.NET Core Module。 在Windows服务器上创建一个新的网站。 配置网站以使用ASP.NET Core Module。 将WebApi部署…

    C# 2023年5月16日
    00
  • C#词法分析器之转换DFA详解

    C#词法分析器之转换DFA详解 什么是词法分析? 词法分析(Lexical Analysis)是编译器中的一个步骤,也称为扫描器(Scanner)。词法分析的主要任务是将程序中的代码转换成一个个Token(标记)。Token是指单词或符号等,是编译器中的最小单位。 词法分析器的输入是源代码,识别出其中的每个Token,每个Token包括 Token种类 和 …

    C# 2023年6月7日
    00
  • ASP.NET Core MVC中的模型(Model)

    在本攻略中,我们将详细讲解ASP.NET Core MVC中的模型(Model),并提供两个示例说明。 什么是模型(Model)? 在ASP.NET Core MVC中,模型(Model)是表示应用程序数据的类或对象。模型通常包含与数据库表或其他数据源中的数据相对应的属性。模型还可以包含用于验证数据的方法和属性。 如何创建模型(Model)? 在ASP.NE…

    C# 2023年5月17日
    00
  • 用C#破解Chrome浏览器cookie值

    背景 最近小编接到一个获取网站请求数据的需求,要求抓取网站某个页面请求的数据。我使用Google Chrome浏览器查看了一下请求链接的传入参数,发现需要传入一个Token值才能获取数据。于是我在Chrome中登录后,通过Postman请求成功,并将Token存储到了Cookie中。然而问题又来了,在代码层面如何获取这个Token呢? 解决方案 小编在网上查…

    C# 2023年4月18日
    00
  • [译]在C#中使用IComparable和IComparer接口

    原文:Use the IComparable and IComparer interfaces in Visual CSharp 本文介绍了在Visual C#中如何使用IComparer和IComparable接口。 概要 本文同时讨论了IComparable和IComparer接口,原因有两点。这两个接口经常一起使用。虽然接口类似且名称相似,但它们却有不…

    C# 2023年4月27日
    00
  • c# Newtonsoft 六个值得使用的特性(下)

    c#Newtonsoft六个值得使用的特性(下) 本文将介绍c#中使用Newtonsoft.Json的六个值得使用的特性,并提供示例来帮助您更好地理解这些特性。 1. JsonConverter JsonConverter 允许我们创建一个自定义的序列化器(serializer)来处理我们的 JSON 对象。我们可以在实现JsonConverter类时覆盖带…

    C# 2023年5月14日
    00
  • C# 小数位数保留的方法集锦

    C# 小数位数保留的方法集锦,这是一个非常实用的技能点,下面我将为大家详细讲解。 1. 保留小数位数的方法 在C# 中,一些数值类型都有自己的 ToString() 方法,这个方法可以用来将值转换为字符串并指定小数位数。在下面的示例中,我们使用 Double 类型,并设置 ToString() 方法来指定小数位数。 double num = 3.141592…

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