首页 > 解决方案 > 在 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。

标签: c#serializationenumsbinaryformatter

解决方案


因为错误状态:

对象类型“program.MyEnum”没有程序集 ID。

assemblyName参数BindToName似乎很可疑。

快速搜索并没有出现很多,除了确实提到:

...如果您将程序集名称保留为 NULL,则正常程序集名称将写入流中,这就是我们设置非空值的原因(您可以使用零长度字符串)

所以我假设设置assemblyNamenull,而不是空字符串,会导致 Binding 解析为当前(正常?)程序集。


推荐阅读