在 C# 中序列化枚举时如何解决程序集 ID 错误?

How to solve assembly ID error when serializing enum in C#?

我正在尝试使用 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();
    }
}

完整错误:

抛出异常:'System.Runtime.Serialization.SerializationException' 在 mscorlib.dll mscorlib.dll 中发生了 'System.Runtime.Serialization.SerializationException' 类型的未处理异常 没有对象类型 'program.MyEnum'.

的程序集 ID

因为错误指出:

No assembly ID for object type 'program.MyEnum'.

BindToNameassemblyName 参数似乎有问题。

快速搜索结果不多,除了 this 确实提到:

...if you leave the assembly-name as NULL, the normal assembly name will be written into the stream, which is why we set a non-null value (you could use a zero-length string)

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