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/

转载请注明:博客园

目录
相关文章
|
15天前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
155 3
|
3月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
137 7
|
4月前
|
XML JSON Java
go语言之JSON序列化
本文介绍了Go语言中的JSON序列化与反序列化,其操作与Java类似。需要注意的是,由于Go语言的包管理机制,变量和引入包的首字母需大写,以便其他包引用。示例代码展示了如何将`Student`结构体进行JSON序列化(返回字节数组,需转为字符串)及反序列化。此外,文章还说明了通过tag(如`json`和`xml`)指定序列化变量的重要性,以避免因包间访问限制导致反序列化失败或值为null的问题。
|
5月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
10月前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
278 12
|
11月前
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
263 7
|
11月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
261 4
|
11月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
209 3
|
11月前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
311 3
|
11月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
348 1

热门文章

最新文章