可以使用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);
這不是在字段級別而是在請求的屬性級別上工作嗎? – Lucero 2010-02-26 12:43:57
@Lucero - 它可以在字段和屬性上工作;這取決於你告訴它做什麼。 – 2010-02-26 12:48:26
非常感謝您提供了一個有趣的鏈接,但我不想讓這樣一個相當簡單的任務涉及全新的第三方組件。另外缺點是它不是xml。 – Chriso 2010-02-26 13:02:18