刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。
MSDN文档中提及了序列化、反序列化的概念,这里引用一下。
序列化:将对象状态转换为可保持或传输的形式的过程。
反序列化:是序列化的逆过程,就是将流转换为对象的过程。
这两个过程一起保证数据易于传输和存储。
详细的请参考:http://msdn.microsoft.com/zh-cn/library/7ay27kt9(v=vs.100).aspx。
下面直接给出完整的代码,该代码演示了如何序列化一个对象以及反序列化(还原对象)的过程。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Object student = new Student() { StudentID = "007", StudentName = "guwei4037" };
string result = ObjectToString<Object>(student);
Console.WriteLine(result + "\r\n");
Student newResult = StringToObject<Student>(result);
Console.WriteLine("ID:{0}, Name:{1}", newResult.StudentID, newResult.StudentName);
}
/// <summary>
/// 对象转字符串(序列化后转Base64编码字符串)
/// </summary>
/// <param name="obj">对象</param>
/// <returns>字符串</returns>
public static string ObjectToString<T>(T obj)
{
using (MemoryStream stream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return Convert.ToBase64String(buffer);
}
}
/// <summary>
/// 字符串转对象(Base64编码字符串反序列化为对象)
/// </summary>
/// <param name="str">字符串</param>
/// <returns>对象</returns>
public static T StringToObject<T>(string str)
{
using (MemoryStream stream = new MemoryStream())
{
byte[] bytes = Convert.FromBase64String(str);
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
IFormatter formatter = new BinaryFormatter();
return (T)formatter.Deserialize(stream);
}
}
}
/// <summary>
/// 可序列化的类,用Serializable标示此类可序列化
/// </summary>
[Serializable]
public class Student
{
public string StudentID { get; set; }
public string StudentName { get; set; }
}
}
运行结果截图:
分享到:
相关推荐
将List中的数据保存到txt中,并读取txt到list中,显示在datagridview中,练习代码,没有0分的选项,不能免费共享,sorry
Serialize Deserialize .net c# 序列化 反序列化
通过一个简单的序列化反序列化方法,其中有自定义事件,窗口传递参数,共享对象等知识
什么叫反序列化? 就是再把介质中的东西还原成对象,把石子还原成人的过程。 在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。 通常网络程序为了传输安全才这么做。不...
C# xml序列化及反序列化(解析xml为对象及对象转xml保存),方法一反序列化取节点KV值,方法二反序列化取节点标签值,方法三取节点KV值,并增加节点对象数组及节点标签组合反序列化
C#序列化和反序列化C#序列化和反序列化C#序列化和反序列化
C# 序列化-反序列化.cs
C#序列化与反序列化,C#序列化与反序列化,很清晰的一个示例
c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例c#对象序列化与反序列化实例
实现C#序列化和反序列化XML-读取wordXML内容
在unity用于json的序列化和反序列化插件(适用语言c#) 配合教程参见我的“unity/c#解析json”
序列化和反序列化的封装类,只要调用就行 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类
C# 序列化 xml soap json binary
C#序列化,反序列化对象完整代码
自己写的C#序列化和反序列化案例,打开软件添加信息序列化到文本,打开软件将文本信息显示到软件Dategridview控件
C#高级序列化与反序列化_C#高级序列化与反序列化_C#高级序列化与反序列化_C#高级序列化与反序列化
.net c# 序列化和反序列.net c# 序列化和反序列.net c# 序列化和反序列.net c# 序列化和反序列.net c# 序列化和反序列.net c# 序列化和反序列
C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化C# 数组与序列化