我有一个小型库,用户可以使用通用界面设置和获取属性。因此,用户可以设置他或她想要的每个对象。
我有一种方法可以使用BinaryFormatter
将属性保存到文件系统。使用string
或DateTime
或...等原生类型,一切正常。但是,如果用户有自定义类,如
class User
{
public string Name { get; set; }
}
比我得到一个例外,class
人不是市场Serializable
。如果我写了关于我班级的[Serializable]
属性,它就可以了。
我现在的问题是:有没有办法在运行时将类声明为Serializable
?所以如果用户忘记这样做,我可以尝试一下吗?
序列化的代码如下:
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 :(得分:2)
C#中的属性是静态元数据。它们不能在运行时注入。您可以做的是使用System.Type
上的反射来在运行时搜索该元数据。
声明该类的用户必须在编译时这样做。