加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 确保参数可序列化?

发布时间:2020-12-15 17:15:25 所属栏目:百科 来源:网络整理
导读:好的,让我看看我是否可以尽可能简洁.我将把一个未知类型的对象传递给一个方法,该方法将在内部使用BinaryFormatter来序列化它传递的数据(我选择了这个因为我不知道数据是什么所以它是最抽象的机制我可以想象).我们假设该方法目前看起来像这样: public void P
好的,让我看看我是否可以尽可能简洁.我将把一个未知类型的对象传递给一个方法,该方法将在内部使用BinaryFormatter来序列化它传递的数据(我选择了这个因为我不知道数据是什么所以它是最抽象的机制我可以想象).我们假设该方法目前看起来像这样:
public void ProvideData(Guid providerKey,ISerializable data,string dataType)...

现在让我们假设我需要确保传递给我的内容实际上可以序列化,以便为什么我认为我需要该对象来实现ISerializable.但是,这个模型的一个问题是我甚至无法传入一个字符串,因为尽管字符串是[Serializable]但它没有实现ISerializable.

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

解决方法

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

例如:

bool canSerialize = myParameter.GetType().IsSerializable;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读