在 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'.
BindToName
的 assemblyName
参数似乎有问题。
快速搜索结果不多,除了 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
,而不是空字符串,会导致绑定解析为当前(正常?)程序集。
我正在尝试使用 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'.
BindToName
的 assemblyName
参数似乎有问题。
快速搜索结果不多,除了 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
,而不是空字符串,会导致绑定解析为当前(正常?)程序集。