在运行时使类可序列化

3
我有一个小型图书馆,用户可以使用通用接口设置和获取属性。因此,用户可以设置他或她想要的任何对象。
然后我有一个方法,使用BinaryFormatter将属性保存到文件系统中。对于像stringDateTime这样的本机类型,一切正常。但是如果用户有自定义类...
class User
{
    public string Name { get; set; }
}

当我得到一个异常时,它说 class Person 没有被标记为 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);
}

我非常确定你做不到,参见https://dev59.com/J3VC5IYBdhLWcg3w-WWs。我认为这也是一种不好的实践。 - DerApe
你可以使用像http://www.sharpserializer.com/en/index.html这样的库,或者也可以使用xml序列化。但正如derape所说,这样做是不好的做法。 - user1519979
好的。谢谢。那么用户将需要承担责任。 - Tomtom
1个回答

2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接