确保参数可序列化?

Mik*_*oud 9 c# serialization

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

public void ProvideData(Guid providerKey, ISerializable data, string dataType)...
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我需要确保传递给我的内容实际上可以被序列化,以便为什么我认为我需要该对象来实现ISerializable.然而,有一个问题与此模型是我甚至不能传递一个string因为eventhough一个string[Serializable]它没有实现ISerializable.

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

Dav*_* R. 12

您可以使用上面的IsSerializable属性进行检查Type.

例如:

bool canSerialize = myParameter.GetType().IsSerializable;
Run Code Online (Sandbox Code Playgroud)

OPIT编辑:最终实施方法

以下是最终的实现,因为这个答案(非常好的答案).它只是一个原型,所以这就是为什么这个方法没有很多,但它证明了答案.需要注意的一点是,检查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();
    }
}
Run Code Online (Sandbox Code Playgroud)