序列化反序列化 (binary/xml) - 常用代码搜集,方便复用

二进制序列化

首先。你被序列化的类需要用[Serializable]特性修饰,例如:
[Serializable] public class AA { public int i = 5; }

那么你可以用如下方法序列化和反序列化:
/// <summary> /// 序列化为二进制字节数组 /// </summary> /// <param name="request">要序列化的对象 </param> /// <returns>字节数组 </returns> public static byte[] SerializeBinary<T>(T request) { System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); System.IO.MemoryStream memStream = new System.IO.MemoryStream(); serializer.Serialize(memStream, request); return memStream.GetBuffer(); } /// <summary> /// 从二进制数组反序列化得到对象 /// </summary> /// <param name="buf">字节数组 </param> /// <returns>得到的对象 </returns> public static T DeserializeBinary<T>(byte[] buf) { System.IO.MemoryStream memStream = new MemoryStream(buf); memStream.Position = 0; System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); T newobj = (T)deserializer.Deserialize(memStream); memStream.Close(); return newobj; }

调用方法

AA p = new AA(); p.i = 15; byte[] bytes = SerializeBinary<AA>(p); AA p2 = DeserializeBinary<AA>(bytes);

源自另一博客的一个非泛型序列化方法,将其修改为泛型写法,主要是方便自己查找。

原文地址:http://www.cnblogs.com/luckeryin/archive/2009/06/05/1496698.html

XML序列化

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; namespace RegexActivator { public class ExtendMethods { public static void Serial<T>(T[] items, string path) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[])); TextWriter writer = new StreamWriter(path); try { xmlSerializer.Serialize(writer, items); } finally { writer.Close(); } } public static T[] Deserial<T>(string path) { if (!File.Exists(path)) return new T[0]; XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[])); FileStream fs = new FileStream(path, FileMode.Open); T[] items; try { items = (T[])xmlSerializer.Deserialize(fs); } finally { fs.Close(); } return items; } } }

c#序列化Hashtable的例子

public void Test() { Hashtable hash = new Hashtable(); hash.Add(1, "one"); hash.Add(2, "two"); hash.Add(3, "three"); hash.Add(4, "four"); //序列化 BinaryFormatter serializer = new BinaryFormatter(); FileStream write_stream = new FileStream("my_hash.bin", FileMode.OpenOrCreate, FileAccess.Write); serializer.Serialize(write_stream, hash); write_stream.Close(); //反序列化 FileStream reade_stream = new FileStream("my_hash.bin", FileMode.Open, FileAccess.Read); BinaryFormatter deserializer = new BinaryFormatter(); Hashtable newHash = (Hashtable)deserializer.Deserialize(reade_stream); reade_stream.Close(); foreach (var key in newHash.Keys) { Console.WriteLine("Key:" + key.ToString() + "/tValue:" + newHash[key].ToString()); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值