使类在运行时可序列化

本文关键字:序列化 运行时 | 更新日期: 2023-09-27 18:21:39

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

然后我有一种方法可以使用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);
}

使类在运行时可序列化

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

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