unity newtonsoft 反序列化报空_开发者应当熟知的 C# 序列化和反序列化

0465a60a981f4edfcc3ff410892f3d51.png

作者 | 喵叔

责编 | 刘静

出品 | CSDN(ID:CSDNnews)

今天我利用这篇文章给大家讲解一下 C# 中的序列化与反序列化。这两个概念我们在开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,伸着可以说是不知道。因此我希望通过这篇文章能让各位对序列化和反序列化的知识有更进一步的掌握。废话不多说开始进入正题。

1ecba173862fab149c3a1ec2473bd29c.png

什么是序列化/反序列化

在所有的开发语言中都存在序列化和反序列化这个概念,所谓的序列化就是把一个对象信息转化为一个可以持久存储的数据形式,经过转化后就可以方便的保存和传输了,因此序列化主要用于平台之间的通讯。由序列化我们可以反推出所谓的反序列化就是将持久存储的数据还原为对象。

0e65cbe19777945db56b4e34c0c9158c.png

C# 中的序列化/反序列化

在 C# 中我们经常会对 JSON 和 XML 进行序列化和反序列化 ,但是还有存在一种序列化/反序列化,那就是将对象序列化为二进制文件,将会二进制文件反序列化为对象。下面我将会对这三种序列化和反序列化进行讲解。

1. JSON

JSON 的英文全称是 JavaScript Object Notation ,是一种轻量级的数据交换格式。完全独立于语言的文本格式 易于人阅读和编写同时也易于机器解析和生成。JSON 是目前互联网中主流的数据交换格式,同时也是很多开发语言配置文件的主流格式。

在 .NET 中存在两个类对 JSON 进行处理,分别是 DataContractJsonSerializer 和 JavaScriptSerializer ,这两个类的功能基本一致。DataContractJsonSerializer 位于命名空间 System.Runtime.Serialization.Json 下,它的特点是必须使用 DataContract 以及 DataMember 属性标记成员。JavaScriptSerializer 位于命名空间 System.Web.Script.Serialization 下,通过名字和它所在的命名空间我们可以得知它主要用在网络通信中,它可以序列化任何类型的对象。同样 .NET 中也存在一个强大的第三方 JSON 序列化/反序列化库 Newtonsoft.Json ,他比前两个类用起来要方便很多。下面我们对这三个序列化/反序列化的方式分别进行讲解。

  • DataContractJsonSerializer

首先我们需要在项目中引用 DataContractJsonSerializer 所在的命名空间,这里要注意的时我们不仅要在项目中添加引用 System.Runtime.Serialization 还需要添加引用 System.ServiceModel.Web 。将这两个命名空添加到命名空间后就可以在代码中引入 DataContractJsonSerializer 的命名空间了。

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

引入命名空间后我们开始编写序列化类

[DataContract]
class Student
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Sex { get; set; }
[DataMember]
public int Age { get; set; }
[DataMember]
public Address Address { get; set; }
}
[DataContract]
class Address
{
[DataMember]
public string City { get; set; }
[DataMember]
public string Road { get; set; }
}

在上述代码中我们看到在类的头部添加了 DataContract 特性,以及在类的属性上也增加了 DataMember 特性 。一旦一个类被声明为 DataContract 时就代表着该类可以被序列化,并且可以在服务端和客户端传输。只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递。默认情况下类中的所有成员属性都不会被序列化传输出去,如果需要将成员数据传输出去就需要在属性头部加入 DataMember 。

下面我们就利用 DataContractJsonSerializer 对对象尽心序列化和反序列化,代码如下

class Program
{
static void Main(string[] args)
{
#region 对象转JSON字符串
Student student = new Student
{
Name = "Tom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值