c# - 在 C# 中序列化枚举时如何解决程序集 ID 错误?
问题描述
我正在尝试使用 binaryformatter 序列化我自己的枚举,但我不断收到一个错误,提示没有程序集 ID。我的枚举看起来像这样:
[Serializable]
public enum MyEnum{NONE, OPTION1, OPTION2, OPTION3};
这是我的序列化代码:
public class Binder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
return Type.GetType(typeName);
}
public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
assemblyName = "";
typeName = serializedType.FullName;
}
}
public static byte[] GetBytes<T>(this T c)
{
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream m = new MemoryStream())
{
bf.Binder = new Binder();
bf.Serialize(m, c);
return m.ToArray();
}
}
完整的错误:
引发的异常:mscorlib.dll 中的“System.Runtime.Serialization.SerializationException”mscorlib.dll 中发生“System.Runtime.Serialization.SerializationException”类型的未处理异常没有对象类型“program.MyEnum”的程序集 ID。
解决方案
因为错误状态:
对象类型“program.MyEnum”没有程序集 ID。
的assemblyName
参数BindToName
似乎很可疑。
快速搜索并没有出现很多,除了这确实提到:
...如果您将程序集名称保留为 NULL,则正常程序集名称将写入流中,这就是我们设置非空值的原因(您可以使用零长度字符串)
所以我假设设置assemblyName
为null
,而不是空字符串,会导致 Binding 解析为当前(正常?)程序集。
推荐阅读
- python-3.x - 没有分隔符的文本文件中的数据通过python进入列表
- python - 使用布尔输出对 df 进行更短的过滤
- object-detection - 如何在 Tensorflow 2.x 中打印准确度和其他指标?
- mysql - 如何在 SQL 的日期字段中插入日期
- php - 将变量从一个函数传递到同一控制器中的另一个函数
- java - Eclipse 在 Windows10 中安装时返回错误消息
- android - 在 react-native 应用程序的发布版本中获取错误
- visual-studio-code - VS Code - 一个文件夹中的多个源文件
- python - 如何进行流畅的图像运动?| 基维
- python - Python获取div标签下的href