9

好的,让我看看我是否可以尽可能简洁。我将传入object一个未知类型的方法,该方法将在内部使用BinaryFormatter来序列化它传递的数据(我选择这个是因为我不知道数据是什么,所以它是我能想象的最抽象的机制)。让我们假设该方法目前看起来像这样:

public void ProvideData(Guid providerKey, ISerializable data, string dataType)...

现在让我们假设我需要确保传递给我的内容实际上可以被序列化,这就是为什么我认为我需要对象来实现ISerializable. 然而,这个模型的一个问题是我什至不能传入 astring因为即使 a stringis[Serializable]它没有实现ISerializable.

那么,构建此方法以确保传递给我的值(简单或复杂)可序列化的正确方法是什么?

4

1 回答 1

12

您可以使用.Type

例如:

bool canSerialize = myParameter.GetType().IsSerializable;

由 OP 编辑​​:最终实现的方法

由于这个答案(非常好的答案),下面是最终的实现。它只是一个原型,所以这就是为什么该方法没有发生太多事情,但它证明了答案。需要注意的一件事是,检查ISerializable接口是否存在没有任何价值,因为在您尝试序列化对象之前,您不会知道它是否应该已经实现ISerializable,所以我在那里走错了路。

谢谢!

public void ProvideData(Guid providerKey, object data, string dataType)
{
    if (!data.GetType().IsSerializable)
    {
        throw new ArgumentException("The data passed is not serializable and therefore is not valid.", "data");
    }

    var formatter = new BinaryFormatter();
    using (var fileStream = new FileStream("data.dat", FileMode.Create))
    {
        formatter.Serialize(fileStream, data);
        fileStream.Close();
    }
}
于 2012-09-12T13:00:09.333 回答