在运行时使类可序列化

时间:2014-09-11 08:56:23

标签: c# serialization binaryformatter

我有一个小型库,用户可以使用通用界面设置和获取属性。因此,用户可以设置他或她想要的每个对象。

我有一种方法可以使用BinaryFormatter将属性保存到文件系统。使用stringDateTime或...等原生类型,一切正常。但是,如果用户有自定义类,如

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);
}

1 个答案:

答案 0 :(得分:2)

C#中的属性是静态元数据。它们不能在运行时注入。您可以做的是使用System.Type上的反射来在运行时搜索该元数据。

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