两中特别有用的序列化,反序列化函数 using XmlSerializer or BinaryFormatter

c# 代码
  1.     /// <summary><summary></summary>     
  2.     /// Serializes object to xml string.   
  3.     /// </summary>     
  4.     public static string ObjectToXml(object serializableObject)      
  5.     {      
  6.         StringWriter sw = new StringWriter();                    
  7.         XmlSerializer serial = new XmlSerializer(serializableObject.GetType());   
  8.         serial.Serialize(sw, serializableObject);      
  9.         return sw.ToString();      
  10.     }      
  11.   
  12.     /// <summary><summary></summary>      
  13.     /// deserialize xml to object.      
  14.     /// </summary>      
  15.     /// <param name="xmlString">serialized xml </param>
  16.     /// <param name="aimObjectType"> the type of target object</param>     
  17.     /// <returns><returns></returns>Deserialized object.</returns>      
  18.     public static object XmlToObject(string xmlString, Type aimObjectType)      
  19.     {      
  20.         XmlSerializer xs = new XmlSerializer(aimObjectType);      
  21.         StringReader sr = new StringReader(xmlString);      
  22.         Object returnedObject = xs.Deserialize(sr);     
  23.         return returnedObject;      
  24.     }      
  25.   
  26.    ///<summary></summary> <summary><summary></summary>  
  27.    /// Serializes serializable object to base64 string.   
  28.    /// </summary><summary></summary>   
  29.    public static string Obj2Base64String(object serializableObject)      
  30.    {      
  31.        byte[] resultBytes = null;      
  32.        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter 
  33.               = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();      
  34.        MemoryStream stream = new MemoryStream();      
  35.        formatter.Serialize(stream, serializableObject);      
  36.        resultBytes = stream.ToArray();      
  37.        stream.Close();      
  38.        string returnedData = Convert.ToBase64String(resultBytes);      
  39.        return returnedData;      
  40.    }      
  41.   
  42.    ///<summary></summary> <summary><summary></summary>  
  43.    /// Deserializes base64 string to object.   
  44.    /// </summary><summary></summary>   
  45.    public static object Base64String2Obj(string deserializedString)      
  46.    {      
  47.        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter  
                  = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();      
  48.        MemoryStream stream = new MemoryStream();      
  49.        byte[] middata = Convert.FromBase64String(deserializedString);      
  50.        stream.Write(middata, 0, middata.Length);     
  51.        //Pay attention to the following line. don't forget this line.   
  52.        stream.Seek(0, SeekOrigin.Begin);      
  53.        object returnedData = formatter.Deserialize(stream);      
  54.        stream.Close();      
  55.        return returnedData;      
  56.    }    
     
第一个序列化,反序列化方式,采用 System.Xml.Serialization namespace 下的XmlSerializer,简单序列化模式。该方式仅仅能序列化strong type 对象。Type可没有attribute [Serializeble]的支持。
第二种 采用System.Runtime.Serialization.Formatters.Binary.BinaryFormatter ,能够比较智能的对大量strong type or week type 进行序列化,并且能够解决第一种模式中当遇到循环引用对象造成的序列化失败的问题,但每个序列化type都必须attribute [Serializeble]的支持。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值