gpt4 book ai didi

c# - 确保参数是可序列化的?

转载 作者:太空狗 更新时间:2023-10-29 17:45:00 26 4
gpt4 key购买 nike

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

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

现在让我们假设我需要确保传递给我的内容实际上可以被序列化,因此我认为我需要对象来实现 ISerializable。但是,此模型的一个问题是我什至无法传入 string,因为尽管 string[Serializable] 但它不是t 实现 ISerializable

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

最佳答案

您可以使用 IsSerializable 检查Type 上的属性。

例如:

bool canSerialize = myParameter.GetType().IsSerializable;

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

下面是这个答案的最终实现(非常好的答案)。它只是一个原型(prototype),所以这就是为什么方法中没有太多内容,但它证明了答案。需要注意的一件事是,检查是否存在 ISerializable 接口(interface)没有任何值(value),因为只有在尝试序列化该对象时,您才会知道它是否应该实现了 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();
}
}

关于c# - 确保参数是可序列化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com