c#将对象序列化为字符串和将字符串反序列化为对象
2009-10-10 16:17
405 查看
asp.net开发中,页面间传值最长用到的是url显式传参,session,application和cookie传值等。对于复杂对象页面传值,如果不考虑性能影响的话,通常可以使用session或者application。那么页面间如何通过url传递复杂对象呢?正像标题说的那样,对象-->字符串,然后字符串-->对象。这个过程可以用下面的代码来实现:
需要注意的是,通过url传递参数(get方式),参数的总长度有一定限制(对于过长的参数,不懂技术的用户是有心理障碍的)。如果复杂对象序列化为字符串后的长度超过get方式的限制,那么这个对象的传值就不适合用url显式传递,可以选择其他途径如post方式或Session方式等等。
注意:序列化后如果url有敏感字符,则还需要url编码处理。
using System; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace DotNet.Common.Utilities { public class SerializeObj { public SerializeObj() { } /// <summary> /// 序列化 对象到字符串 /// </summary> /// <param name="obj">泛型对象</param> /// <returns>序列化后的字符串</returns> public static string Serialize<T>(T obj) { try { IFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, obj); stream.Position = 0; byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); stream.Flush(); stream.Close(); return Convert.ToBase64String(buffer); } catch (Exception ex) { throw new Exception("序列化失败,原因:" + ex.Message); } } /// <summary> /// 反序列化 字符串到对象 /// </summary> /// <param name="obj">泛型对象</param> /// <param name="str">要转换为对象的字符串</param> /// <returns>反序列化出来的对象</returns> public static T Desrialize<T>(T obj, string str) { try { obj = default(T); IFormatter formatter = new BinaryFormatter(); byte[] buffer = Convert.FromBase64String(str); MemoryStream stream = new MemoryStream(buffer); obj = (T)formatter.Deserialize(stream); stream.Flush(); stream.Close(); } catch (Exception ex) { throw new Exception("反序列化失败,原因:" + ex.Message); } return obj; } } }
需要注意的是,通过url传递参数(get方式),参数的总长度有一定限制(对于过长的参数,不懂技术的用户是有心理障碍的)。如果复杂对象序列化为字符串后的长度超过get方式的限制,那么这个对象的传值就不适合用url显式传递,可以选择其他途径如post方式或Session方式等等。
注意:序列化后如果url有敏感字符,则还需要url编码处理。
相关文章推荐
- 【C#】解决进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。
- C#将JSON字符串对象序列化与反序列化
- c#将对象序列化为字符串和将字符串反序列化为对象
- C#将对象序列化成JSON字符串
- C#将Json字符串反序列化成List对象类集合
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串【转】
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
- C#将Json字符串反序列化成List对象类集合
- C#将Json字符串反序列化成List对象类集合
- C#将Json字符串反序列化成List对象类集合
- C#将对象序列化成JSON字符串
- [MVC_Json序列化]Json字符串反序列化成C#对象
- [K/3Cloud]将JSON字符串反序列化为C#动态对象
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串(转)
- c#将对象序列化为字符串和将字符串反序列化为对象
- [K/3Cloud]将JSON字符串反序列化为C#动态对象
- C#将Json字符串反序列化成List对象类集合
- c#将对象序列化为字符串和将字符串反序列化为对象
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串
- C#将58同城商圈接口返回Json字符串反序列化成List对象类集合绑定DropdownList