首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

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

2012-10-15 
序列化反序列化 (binary/xml) - 常用代码搜集,方便复用http://blog.csdn.net/wuyazhe/article/details/577

序列化反序列化 (binary/xml) - 常用代码搜集,方便复用
http://blog.csdn.net/wuyazhe/article/details/5775666

二进制序列化

首先。你被序列化的类需要用[Serializable]特性修饰,例如:
view plain

    [Serializable] 
    public class AA 
    { 
        public int i = 5; 
    } 



那么你可以用如下方法序列化和反序列化:
view plain

    ///  <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; 
    }  



调用方法

view plain

    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序列化

view plain

    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的例子

view plain

    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()); 
        } 
    } 

热点排行