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#实现下载网页HTML源码的方法

    下面是“C#实现下载网页HTML源码的方法”的完整攻略,具体流程如下: 1. 发送HTTP请求 使用C#自带的WebRequest类向目标网址发送HTTP请求,获取服务器响应。HTTP请求的方式分为GET和POST,这里以GET为例,构造请求如下: string url = "http://www.example.com"; WebReq…

    C# 2023年6月3日
    00
  • C#一个方法返回多个值示例

    下面是关于C#一个方法返回多个值的完整攻略。 什么是返回多个值的方法 C#的函数(方法)通常只能返回一个值,但是有时候一个函数需要返回多个值,此时就需要使用一些特殊的方式实现返回多个值的方法,例如使用元组(Tuple)、结构体(Struct)或者自定义类型等方式。 使用元组实现一个方法返回多个值 元组是用来组合多个数据项的一种数据结构。在C#7中,引入了元组…

    C# 2023年5月15日
    00
  • 轻松学习C#的抽象类

    为了轻松学习C#的抽象类,您可以遵循以下步骤进行学习。 1.了解抽象类的定义和用途 抽象类是一个被声明为抽象的类,它不能被实例化,但是可以使用它的引用来引用其子类的对象。抽象类通常用于定义抽象方法,这些方法不包括任何实现细节,只是定义了子类必须实现的方法。抽象类还可以包括实现的方法和字段。 2.学习如何声明抽象类 要声明一个抽象类,您需要使用abstract…

    C# 2023年6月1日
    00
  • Unity中 mesh生成斜坡的示例代码

    下面我为你详细讲解如何在Unity中生成斜坡的示例代码。 Unity中mesh生成斜坡的示例代码 1. 创建空白的GameObject 首先我们需要在场景中创建一个空白的GameObject。你可以在Unity的菜单栏中选择GameObject -> CreateEmpty来创建它。 2. 添加MeshFilter和MeshRenderer组件 选中G…

    C# 2023年5月15日
    00
  • 通过隐藏option实现select的联动效果

    当我们需要实现 select 元素之间的联动效果时,往往需要使用 JavaScript 动态改变 select 的 options。但实际上,我们也可以通过设置option的隐藏与显示来实现联动效果。 下面是通过隐藏 option 实现 select 的联动效果的完整攻略: 步骤一:编写 HTML 结构 首先我们需要编写 HTML 结构,包含所有要联动的 s…

    C# 2023年6月1日
    00
  • VisualStudio2019安装C#环境的实现方法

    下面是VisualStudio2019安装C#环境的实现方法的完整攻略: 前置要求 在安装Visual Studio 2019之前,需要确认你的电脑是否满足以下要求: Windows 10 版本 1703或更高版本 .NET框架 4.6.2或更高版本 如果你的电脑不满足以上要求,请先进行升级再进行安装。 步骤一:下载安装Visual Studio 2019 …

    C# 2023年5月15日
    00
  • JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方

    在使用jQuery的$.post和$.ajax方法访问WCF ajax服务时,需要注意以下几个问题: 跨域访问问题 由于浏览器的同源策略,如果WCF ajax服务和jQuery代码不在同一个域中,就会出现跨域访问问题。为了解决这个问题,可以在WCF ajax服务中添加CORS(跨域资源共享)支持,或者使用JSONP(JSON with Padding)技术。…

    C# 2023年5月15日
    00
  • C#用websocket实现简易聊天功能(客户端)

    下面是C#用websocket实现简易聊天功能(客户端)的完整攻略。 1. 准备工作 在开始实现聊天功能之前,你需要先准备好以下几件事情: 安装websocket库:你可以通过在Visual Studio中打开NuGet包管理器,然后搜索websocket来安装websocket库。 了解websocket连接的基本知识:websocket是一种基于TCP协…

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