发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
using System;namespace ConsoleApp_Serializable{ class Program { static void Main(string[] args) { Person mike = new Person() { Age = 21, Name = "Mike" }; mike.NameChanged += mike_NameChanged; BinarySerializer.SerializeToFile(mike, @"c:\", "person.txt"); Person p = BinarySerializer.DeserializeFromFile<Person>(@"c:\person.txt"); p.Name = "rose"; Console.WriteLine(p.Name); Console.WriteLine(p.Age.ToString()); Console.ReadKey(); } static void mike_NameChanged(object sender, EventArgs e) { Console.WriteLine("Name Changed !"); } } [Serializable] class Person { private string name; public int Age { get; set; } public string Name { get { return name; } set { if (NameChanged != null) { NameChanged(this, null); } name = value; } } //事件往往是不需要序列化的,反序列化的环境和序列化的环境往往不一致,这就失去了将事件序列化的意义。 [field: NonSerialized] public event EventHandler NameChanged; }}
using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace ConsoleApp_Serializable{ public class BinarySerializer { /// <summary> /// 将类型序列化为字符串 /// </summary> public static string Serialize<T>(T t) { using (MemoryStream stream = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, t); return System.Text.Encoding.UTF8.GetString(stream.ToArray()); } } /// <summary> /// 将类型序列化为文件 /// </summary> public static void SerializeToFile<T>(T t, string path, string fullname) { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string fullPath = string.Format(@"{0}\{1}", path, fullname); using (FileStream stream = new FileStream(fullPath, FileMode.OpenOrCreate)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, t); stream.Flush(); } } /// <summary> /// 将字符串反序列化为类型 /// </summary> public static TResult Deserialize<TResult>(string s) where TResult : class { byte[] bs = System.Text.Encoding.UTF8.GetBytes(s); using (MemoryStream stream = new MemoryStream(bs)) { BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(stream) as TResult; } } /// <summary> /// 将文件反序列化为类型 /// </summary> public static TResult DeserializeFromFile<TResult>(string path) where TResult : class { using (FileStream stream = new FileStream(path, FileMode.Open)) { BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(stream) as TResult; } } }}
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C#序列化与反序列化学习笔记
class Program { /// <summary> /// Book类 /// </summary> [DataContract] class Book { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } [Dat...
.NET基础拾遗(3)字符串、集合和流(下)
WriteLine(''经过序列化和反序列化后:'');对于某些类型,序列化和反序列化往往有一些特殊的操作或逻辑检查需求,这时...
c# 深复制
实现深复制的思路为:先将类序列化到内存中,然后从内存中反序列化回来,就可实现深复制。public int CategoryID { get;Formatters.Product p1 = new Product() { Name = "", CategoryID = 1...
关于BinaryFormatter
关于BinaryFormatter.FileStream fs = new FileStream("SerializedDate.data", FileMode.BinaryFormatter bf = New BinaryFormatter();在这篇文章中我将使用BinaryFormatter序列化类Book作为...
C#序列化和反序列化 (BinaryFormatter、SoapFormatter、XML序列化)
关于循环引用: 比如在上面的例子Book类中加入如下一个属性: public Book relationBook; 在调用序列化时使用如下方法: Book book = new Book(); book.BookID = \&qu...
C# DataSet对象序列化并压缩和反序列化及解压缩
为什么需要序列化,以及序列化的一些操作【收录】
为什么需要序列化,以及序列化的一些操作【收录】我的理解: 比如用一个类描述一张合同,而这个类实例化后其中的字段保存着合同的信息,如果现在要把这个类的实例发送到另一台机器、另一个窗体或...
C# MemoryStream和BinaryFormatter
C# MemoryStream和BinaryFormatter.//将读写指针移到距流开头10个字节的位置mem.Seek(10,SeekOrigin.Begin);MessageBox.Show(mem.ReadByte().ToString());mem.Close();}内存流的Length属性代表了其中存...
序列化与反序列化 - BinaryFormatter二进制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)
序列化与反序列化 - BinaryFormatter二进制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)XML系列化更详细的文章:http://www.cnblogs.com/kissdodog/p/3468385.html.
微信扫码,在手机上查看选中内容