C# 串行化和反串行化存储数据示例
2014-10-09 17:16
260 查看
可以将对象和结构体转化为某种格式,从而适合网络传输和数据存储(串行化主要完成两个任务:实现WEB服务和将集合对象存储在介质之中)。在.NET中,这个转换过程就成为串行化(Serialization),逆串行化(Deserialization)是串行化的逆过程,可以将串行化流转换为原来的对象或者结构体。
.NET主要支持三种主要的串行化:
1,二进制串行化(Binary),使用BinaryFormatter类,将类型串行化为二进制流。
2,SOAP串行化。使用SoapFormatter类,将类型串行化为遵循简单对象访问协议标准的XML格式。
3,XML串行化,使用XMLSerializer类,将类型串行化为基本的XML,WEB服务就使用这样的串行化。
对类进行XML串行化需要注意以下几点:
(1)该类必须有公共的无参构造函数
(2)只能串行化公共的属性和字段
(3)不能串行化只读的属性
(4)若要串行化定制集合类中的对象,则该类必须从System.Collection.CollectionBase类派生,并包含索引器。
(5)要串行化多个对象,通常最简单的方法是将他们存放在强类型的数组或链表等容器中。
二进制串行化示例:
.NET主要支持三种主要的串行化:
1,二进制串行化(Binary),使用BinaryFormatter类,将类型串行化为二进制流。
2,SOAP串行化。使用SoapFormatter类,将类型串行化为遵循简单对象访问协议标准的XML格式。
3,XML串行化,使用XMLSerializer类,将类型串行化为基本的XML,WEB服务就使用这样的串行化。
对类进行XML串行化需要注意以下几点:
(1)该类必须有公共的无参构造函数
(2)只能串行化公共的属性和字段
(3)不能串行化只读的属性
(4)若要串行化定制集合类中的对象,则该类必须从System.Collection.CollectionBase类派生,并包含索引器。
(5)要串行化多个对象,通常最简单的方法是将他们存放在强类型的数组或链表等容器中。
二进制串行化示例:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System.Collections; namespace SerializeDemo { /// <summary> /// 用户信息结构体 /// </summary> [Serializable] struct UserInfo { public UserInfo(string id,string name,string password) { this.id = id; this.name = name; this.password = password; } string id; public string Id { get { return id; } } string name; public string Name { get { return name; } } string password; public string Password { get { return password; } } } /// <summary> /// 商品信息结构体 /// </summary> [Serializable] struct Goods { public Goods(string id,string name,double price) { this.id = id; this.name = name; this.price = price; } string id; public string Id { get { return id; } } string name; public string Name { get { return name; } } double price; public double Price { get { return price; } } } class Program { static void Main(string[] args) { ArrayList arr = new ArrayList(); for (int i = 0; i < 1000; i++) { UserInfo info = new UserInfo("Id" + i.ToString(), "Name" + i.ToString(), "PassWord" + i.ToString()); arr.Add(info); } for (int i = 0; i < 1000; i++) { Goods info = new Goods("Id" + i.ToString(), "Good" + i.ToString(), i); arr.Add(info); } FileStream fs = new FileStream(@"C:\Users\Jessiane\Desktop\data.dat", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, arr); fs.Close(); arr.Clear(); fs = new FileStream(@"C:\Users\Jessiane\Desktop\data.dat", FileMode.Open); arr = (ArrayList)bf.Deserialize(fs); while (true) { Console.WriteLine("输入检索名"); string name = Console.ReadLine(); foreach (object o in arr) { if (o is Goods) { Goods info = (Goods)o; if (info.Name == name) { Console.WriteLine(info.Id.ToString()); } } } } } } }
相关文章推荐
- 在C#中存储Blob类型的数据,
- 在C#中存储Blob类型的数据,
- C# 向数据中存储和读取二进制文件!!
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 在C#中用最简洁有效的代码执行存储过程并返回数据
- 在C#中用最简洁有效的代码执行存储过程并返回数据
- C#中利用ADO.NET存储图片、文件等二进制数据
- C#与IronPython脚本进行数据交互示例
- 有限层树形数据转换成无限层树形数据的示例存储过程(MS SQL 2K)
- [MSSQL]存储过程示例(拷贝数据表--游标使用--更新数据-日期函数的使用)
- [源代码]千万级数据分页存储过程示例!
- 在C#中用最简洁有效的代码执行存储过程并返回数据
- Chap 4 学习笔记-使用C#存储变量数据
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- SQL 数据存储过程 数据访问 用C#编写
- 用C#将sql中的blob数据存储到oracle中
- Chap 4 学习笔记-使用C#存储变量数据
- C#DataViewRowState一个数据表的数据状态示例
- C#与IronPython脚本进行数据交互示例
- SQL Server 2000 通用单表或视图查询存储过程及C#调用示例