2014-09-11 80 views
2

我有一個小型庫,用戶可以使用通用接口設置和獲取屬性。因此,用戶可以設置他或她想要的每個對象。使類在運行時可序列化

比我有一種方法,使用BinaryFormatter將屬性保存到文件系統。使用像stringDateTime或......一切正常,一切工作正常。但是,如果用戶有一個像

class User 
{ 
    public string Name { get; set; } 
} 

自定義類比我得到一個例外,那class人是不是市場Serializable。如果我寫關於我的課程的[Serializable]屬性,它可以正常工作。

我現在的問題是:有沒有一種方法可以在運行時聲明一個類爲Serializable?所以如果用戶忘記了,我可以試試嗎?

的序列化的代碼如下所示:在C#

public void Save(string saveFilePath) 
{ 
    byte[] binaryData; 
    using (var memoryStream = new MemoryStream()) 
    { 
     var binaryFormatter = new BinaryFormatter(); 
     binaryFormatter.Serialize(memoryStream, AllProperties); 
     binaryData = memoryStream.ToArray(); 
    } 
    File.WriteAllBytes(saveFilePath, binaryData); 
} 
+0

我很確定你不能,看到http://stackoverflow.com/questions/129285/can-attributes-be-added-dynamically-in-c這將是一個不好的做法,以及我會說 – derape 2014-09-11 08:57:50

+0

您可以使用像http://www.sharpserializer.com/en/index.html或xmlserialisation這樣的庫。但正如derape所說,這是不好的做法。 – user1519979 2014-09-11 09:02:19

+0

好的。謝謝。用戶將不得不爲此承擔責任。 – Tomtom 2014-09-11 09:10:15

回答

1

屬性是靜態的元數據。它們不能在運行時注入。你可以做的是在System.Type上使用反射來在運行時搜索元數據。

聲明該類的用戶在編譯時必須這樣做。

相關問題