您可以使用FormatterServices 类。
你有一本课本:
[Serializable]
class Book
{
public string Title { get; set; }
public string Author { get; set; }
// Constructor for setting new values.
public Book(string title, string author)
{
Title = title;
Author = author;
}
}
你可以这样序列化它:
var book = new Book("Moby Dick", "Herman Melville");
string path = Path.GetTempFileName();
var bf = new BinaryFormatter();
using (var fs = new FileStream(path, FileMode.Create))
bf.Serialize(fs, book);
如果您的对象被修改:
// Edit object
book.Title = "Foo";
Console.WriteLine("{0}, {1}", book.Title, book.Author);
您可以使用以下代码恢复它:
Book temp;
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
temp = (Book) bf.Deserialize(fs);
MemberInfo[] members = FormatterServices.GetSerializableMembers(typeof (Book));
FormatterServices.PopulateObjectMembers(book, members, FormatterServices.GetObjectData(temp, members));
// Object state is back
Console.WriteLine("{0}, {1}", book.Title, book.Author);