序列化与反序列化,及Json序列化反序列化

简介: 序列化是将对象状态转换为可保持或可传输的格式的过程,反序列化则过程相反。用于存储和传输数据。 (一)asp.net序列化与反序列化 .net提供多种序列化类 (1)BinaryFormatter 类 名字空间:System.

序列化是将对象状态转换为可保持或可传输的格式的过程,反序列化则过程相反。用于存储和传输数据。

(一)asp.net序列化与反序列化

.net提供多种序列化类

1BinaryFormatter

名字空间:System.Runtime.Serialization.Formatters.Binary

这个类用于以二进制格式将对象或整个连接对象图形序列化和反序列化

构造器两个:

BinaryFormatter()
BinaryFormatter(ISurrogateSelector, StreamingContext)

 

介绍它的两个主要方法:

1 Serialize方法

将对象或连接对象图形序列化为给定流

它有两个重载:

Serialize(Stream, Object)
Serialize(Stream, Object,Header[])

 

Customer

public   class  Customer
{
    
public   int  Unid {  get set ; }
    
public   string  Name {  get set ; }
    
public   string  Call {  get set ; }
}

 

下边通过示例来测试序列化方法Serialize

public   void  TestSerialize()
{
    Customer customer 
=   new  Customer {Unid = 1 ,Name = " 宋江 " ,Call = " 89589689 "  };
    FileStream fs 
=   new  FileStream( " test.dat " , FileMode.Create); 

    BinaryFormatter formatter 
=   new  BinaryFormatter();
    
try
    {
        formatter.Serialize(fs, customer);
    }
    
catch
    { }
    
finally
    {
        fs.Close();
    }
}

 

测试时,这个会抛出异常:类型“SerializeTest.Customer”未标记为可序列化。所以要在Customer类上添加修饰标签

[Serializable]
public   class  Customer

 

测试,在bin\debug文件夹中可以看到test.dat文件。

2 Deserialize方法

将流反序列化为对象图形,它也有两个重载

Deserialize(Stream) 
Deserialize(Stream, HeaderHandler)

 

通过示例来测试从流进行反序列化

 

public   void  TestDeserialize()
{

    Customer customer 
=   new  Customer();
    FileStream fs 
=   new  FileStream( " test.dat " , FileMode.Open);

    BinaryFormatter formatter 
=   new  BinaryFormatter();
    customer
=  formatter.Deserialize(fs)  as  Customer;
    fs.Close();

    Console.WriteLine(customer.Name);
}

 

结果输出:宋江

2SoapFormatter

名字空间:System.Runtime.Serialization.Formatters.Soap

SOAP 格式将对象或整个连接对象的图形序列化和反序列化。

SOAP就是simple object access protocol的缩写,简单对象传输协议。是一种轻量的,简单的,基于xml的协议。

这个要添加对System.Runtime.Serialization.Formatters.Soap.dll的引用

构造器:

SoapFormatter xx = new   SoapFormatter()
SoapFormatter(ISurrogateSelector, StreamingContext)

 

主要介绍其中2个方法

1 Serialize方法

Serialize(Stream, Object) 
Serialize(Stream, Object, Header[]

 

public   void  TestSoapSerialize()
{
    Customer customer 
=   new  Customer { Unid  =   1 , Name  =   " 宋江 " , Call  =   " 89589689 "  };

    FileStream fs 
=   new  FileStream( " soaptest.dat " , FileMode.Create);
    SoapFormatter formatter 
=   new  SoapFormatter();
    
try
    {
        formatter.Serialize(fs, customer);
    }
    
catch
    { }
    
finally
    {
        fs.Close();
    }
}

 

打开bin\debug中的soaptest.dat文件,这就是soap格式。

2 Deserialize方法

反序列化soap格式

Deserialize(Stream) 
Deserialize(Stream, HeaderHandler)

 

其它的不多说了。

public   void  TestSoapDeserialize()
{
    Customer customer 
=   new  Customer();
    FileStream fs 
=   new  FileStream( " soaptest.dat " , FileMode.Open);
    SoapFormatter formatter 
=   new  SoapFormatter();
    customer 
=  formatter.Deserialize(fs)  as  Customer;
    fs.Close();

    Console.WriteLine(customer.Name);
}

 

3XmlSerializer

将对象序列化到 XML 文档中和从 XML 文档中反序列化对象

名字空间:System.Xml.Serialization

构造方法太多,不列举了,可以参考帮助

1 Serialize方法

拿出一个来说:

public   void  Serialize(XmlWriter xmlWriter,Object o)

 

public   void  TestXmlSerialize()
{
    Customer customer 
=   new  Customer { Unid  =   1 , Name  =   " 宋江 " , Call  =   " 89589689 "  };

    FileStream fs 
=   new  FileStream( " xmltest.xml " , FileMode.Create);
    XmlSerializer formatter 
=   new  XmlSerializer( typeof (Customer));
    formatter.Serialize(fs, customer);

    fs.Close();
}

 

结果可以到debug\bin里查看。

2 Deserialize方法

 

public   void  TestXmlDeserialize()
{
    Customer customer 
=   new  Customer();
    FileStream fs 
=   new  FileStream( " xmltest.xml " , FileMode.Open);
    XmlSerializer formatter 
=   new  XmlSerializer( typeof (Customer));
    customer 
=  formatter.Deserialize(fs)  as  Customer;
    fs.Close();

    Console.WriteLine(customer.Name);
}

 

(二)Json序列化与反序列化

Json相关可见:

http://www.cnblogs.com/jams742003/category/225387.html

 

Json序列化和反序列化指的是:对象序列化为JSON,并可用于从 JSON 反序列化对象

.net 3.5

名字空间:System.Runtime.Serialization.Json

但程序集是: System.ServiceModel.Web.dll

 

1DataContractJsonSerializer

构造方法很多。

介绍这个类其中2个方法:

1 WriteObject方法

有好种重载,这里测试一个:

public   override   void  WriteObject(Stream stream,Object graph)

 

测试:

public   void  TestJsonSerialize()
{

    Customer customer 
=   new  Customer { Unid  =   1 , Name  =   " 宋江 " , Call  =   " 89589689 "  };
    DataContractJsonSerializer ds 
=   new  DataContractJsonSerializer( typeof (Customer)); 

    FileStream fs 
=   new  FileStream( " json.txt " , FileMode.Create);
    ds.WriteObject(fs, customer);
    fs.Close();
}

 

进行Json序列化时,类型不必添加修饰标签

bin\debug里可以看到json串。

有关json串请见:

http://www.cnblogs.com/jams742003/archive/2009/12/29/1634764.html

 

2 ReadObject方法

重载很多。

public   override  Object ReadObject(Stream stream)

 

测试:

public   void  TestJsonDeserialize()
{
    DataContractJsonSerializer ds 
=  
        
new  DataContractJsonSerializer( typeof (Customer)); 

    FileStream fs 
=   new  FileStream( " json.txt " , FileMode.Open);
    var cc 
=  ds.ReadObject(fs);
    fs.Close();
}

 

2JavaScriptSerializer

为启用 AFAX 的应用程序提供序列化和反序列化功能

名字空间:System.Web.Script.Serialization

程序集:System.Web.Extensions(在 System.Web.Extensions.dll 中)

说其中2个方法

1 Serialize方法

 

Serialize(Object)
Serialize(Object, StringBuilder)

 

public   void  TestJsSerialize()
{
    Customer customer 
=   new  Customer { Unid  =   1 , Name  =   " 宋江 " , Call  =   " 89589689 "  };
    JavaScriptSerializer js 
=   new  JavaScriptSerializer(); 

    Console.WriteLine(js.Serialize(customer));
}

 

输出串:{"Unid":1,"Name":"宋江","Call":"89589689"}

 

2 Deserialize方法

public   void  TestJsDeserialize()
{
    
string  str  =  File.ReadAllText( " jsjson.txt " );
    JavaScriptSerializer js 
=   new  JavaScriptSerializer();
    Customer customer 
=  js.Deserialize < Customer > (str); 

    Console.WriteLine(customer.Name);
}

 

3Json.net

这是一个第三方工具

请见:http://www.cnblogs.com/jams742003/archive/2009/11/04/1595737.html

 

名字空间:Newtonsoft.Json

添加Newtonsoft.Json.dll程序集

 

其中2个方法:

 

1 SerializeObject方法

public   void  TestJsonnetSerialize()
{
    Customer customer 
=   new  Customer { Unid  =   1 , Name  =   " 宋江 " , Call  =   " 89589689 "  };
    
string  strJson = JsonConvert.SerializeObject(customer);
    StreamWriter sw 
=  File.CreateText( " jsonnet.txt " );
    sw.Write(strJson);

    sw.Close();
}

 

2 DeserializeObject方法

public   void  TestJsonnetDeserialize()
{
    
string  str  =  File.ReadAllText( " jsonnet.txt " );
    Customer customer 
=  JsonConvert.DeserializeObject < Customer > (str);
    Console.WriteLine(customer.Name);
}

 

更多关于json.net的请见:

http://www.cnblogs.com/jams742003/archive/2009/11/04/1595737.html

 

博客园大道至简

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

转载请注明:博客园

目录
相关文章
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
47 1
|
10天前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
14 3
|
15天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
17天前
|
JSON JavaScript 前端开发
|
25天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
25天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
24 0
|
2月前
|
JSON fastjson Java
niubility!即使JavaBean没有默认无参构造器,fastjson也可以反序列化。- - - - 阿里Fastjson反序列化源码分析
本文详细分析了 Fastjson 反序列化对象的源码(版本 fastjson-1.2.60),揭示了即使 JavaBean 沲有默认无参构造器,Fastjson 仍能正常反序列化的技术内幕。文章通过案例展示了 Fastjson 在不同构造器情况下的行为,并深入探讨了 `ParserConfig#getDeserializer` 方法的核心逻辑。此外,还介绍了 ASM 字节码技术的应用及其在反序列化过程中的角色。
79 10
|
2月前
|
存储 XML JSON
用示例说明序列化和反序列化
用示例说明序列化和反序列化