JSON 序列化和反序列化——.net3.5自带类库实现

简介: .net3.5提供了json对象序列化与反序列化的类。位置在:System.Runtime.Serialization.Json空间下。其中如果要应用这个空间还必须添加对 System.ServiceModel System.ServiceModel.Web 这两个库文件的引用。

.net3.5提供了json对象序列化与反序列化的类。位置在:System.Runtime.Serialization.Json空间下。其中如果要应用这个空间还必须添加对

System.ServiceModel

System.ServiceModel.Web

这两个库文件的引用。

参考实体类:Customer

public   class  Customer
{
   
public   int  Unid {  get set ; }
   
public   string  CustomerName {  get set ; }
}

 

DataContractJsonSerializer

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。无法继承此类。

其中有个方法WriteObject,它的功能定义为:将对象序列化为 JavaScript 对象表示法 (JSON) 文档

它有三个方法重载,其中一个为:

public   override   void  WriteObject(Stream stream,Object graph)

 

它的功能描述这:将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中

 

(一)序列化

public   string  ToJson(Customer customer)
{

     DataContractJsonSerializer ds 
=   new  DataContractJsonSerializer( typeof (Customer));
     MemoryStream ms
= new  MemoryStream(); 

     ds.WriteObject(ms, customer); 

     
string  strReturn = Encoding.UTF8.GetString(ms.ToArray());
     ms.Close();
     
return  strReturn;
}

 

创建类实例,通过它的WriteObject方法来向流写入序列化的对象,再把流写入到字符串中。就可以得到JSON对象。

测试一下:

Customer cc  =   new  Customer {Unid = 1 ,CustomerName = " John "  };
string  strJson  =  ToJson(cc);

Console.WriteLine(strJson);

 

结果为:{"CustomerName":"John","Unid":1}

(二)反序列化

ReadObject方法,其描述为:反序列化 JSONJavaScript 对象表示法)数据,并返回反序列化的对象。

它有很多重载,现在通过一种:

public override Object ReadObject(Stream stream)

它从流中得到反序列化的对象。

public   object  FromJson( string  strJson)
{
    DataContractJsonSerializer ds 
=   new  DataContractJsonSerializer( typeof (Customer));
    MemoryStream ms 
=   new  MemoryStream(Encoding.UTF8.GetBytes(strJson)); 

    
return  ds.ReadObject(ms);
}

 

测试:

string  strJson = " {\ " CustomerName\ " :\ " John\ " ,\ " Unid\ " :1} " ;
Customer c
= FromJson(strJson)  as  Customer;

Console.WriteLine(c.Unid
+ "   " + c.CustomerName);

 

(三)通过泛型方法对两者进行修改

为了适应多类型实例的序列化与反序列化,通过泛型方法来实现。

public   string  ToJson < T > (T t)
{
    DataContractJsonSerializer ds 
=   new  DataContractJsonSerializer( typeof (T));
    MemoryStream ms 
=   new  MemoryStream(); 
    ds.WriteObject(ms, t); 

    
string  strReturn  =  Encoding.UTF8.GetString(ms.ToArray());
    ms.Close();
    
return  strReturn;


public  T FromJson < T > ( string  strJson)  where  T: class
{
    DataContractJsonSerializer ds 
=   new  DataContractJsonSerializer( typeof (T));
    MemoryStream ms 
=   new  MemoryStream(Encoding.UTF8.GetBytes(strJson)); 

    
return  ds.ReadObject(ms)  as  T;
}

 

· 反序列化时通过泛型约束来指定类型 T 为类类型。

测试:

Customer cc  =   new  Customer {Unid = 1 ,CustomerName = " John "  };
string  strJsons  =  ToJson < Customer > (cc);
Console.WriteLine(strJsons); 

string  strJson = " {\ " CustomerName\ " :\ " John\ " ,\ " Unid\ " :1} " ;
Customer c 
=  FromJson < Customer > (strJson);
Console.WriteLine(c.Unid
+ "   " + c.CustomerName);

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
1月前
|
JSON Java Maven
使用Jackson进行 JSON 序列化和反序列化
使用Jackson进行 JSON 序列化和反序列化
27 0
|
1月前
|
存储 JSON 安全
序列化模块pickle和json有什么区别
序列化模块pickle和json有什么区别
18 0
|
2月前
|
JSON 数据格式 C++
[序列化协议] --- JSON
[序列化协议] --- JSON
31 0
|
3月前
|
JSON Java fastjson
Java中的JSON序列化和反序列化
Java中的JSON序列化和反序列化
|
3月前
|
JSON 机器人 数据格式
阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
【1月更文挑战第7天】【1月更文挑战第33篇】阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
206 1
|
4月前
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
68 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
4月前
|
XML 存储 JSON
C# | 使用Json序列化对象时忽略只读的属性
将对象序列化成为Json字符串是一个使用频率非常高的功能。Json格式具有很高的可读性,同时相较于XML更节省空间。 在开发过程中经常会遇到需要保存配置的场景,比如将配置信息保存在配置类型的实例中,再将这个对象序列化成为Json字符串并保存。当需要加载配置时,则是读取Json格式的字符串再将其还原成配置对象。在序列化的过程中,默认会将所有公开的属性和字段都序列化进入Json字符串中,这其中也会包含只读的属性或字段,而只读的属性和字段在反序列化的过程中其实是无意义的,也就是说这一部分存储是多余的。 本文将讲解如何在执行Json序列化时,忽略掉那些只读的属性和字段。
54 0
C# | 使用Json序列化对象时忽略只读的属性
|
4月前
|
XML JSON 网络协议
JSON和Protobuf序列化
因为像TCP和UDP这种底层协议只能发送字节流,因此当我们在开发一些远程过程调用(RPC)的程序时,需要将应用层的Java POJO对象序列化成字节流,数据接收端再反序列化成Java POJO对象。序列化一定会设计编码和格式化,目前常见的编码方式有:
|
4月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
4月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
102 0