2014-09-11 64 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上使用反射来在运行时搜索元数据。

声明该类的用户在编译时必须这样做。