将枚举移动到不同的程序集
Moving enums to a different assembly
我的第一个程序集中有一个枚举类型,如下所示:
public enum MyEnum
{
ONE,
TWO,
THREE
}
因为我想扩展我的应用程序,所以我决定将其移动到另一个程序集 (dll) 并 link 将它移动到我的第一个程序集。
当我这样做时,我得到了一个奇怪的结果,当我对枚举在第一个程序集中时序列化的 类 进行消毒时,默认情况下它们都是 return 第一个枚举成员。
有解决办法吗?
我什至尝试像这样解析它:
(MyEnum)Enum.Parse(typeof(MyEnum), serializer.MyEnumType.ToString());
没有效果。
PS。我使用二进制序列化器,枚举在同一个命名空间中并且仍然具有相同的名称。
[Serializable]
public class testClass
{
public MyEnum En { set; get; }
}
public class test
{
void Serialize(string file)
{
testClass ser = new testClass();
IFormatter formatter = new BinaryFormatter();
System.IO.FileStream stream = new FileStream(file, FileMode.Create, System.IO.FileAccess.Write, FileShare.None);
formatter.Serialize(stream, ser);
stream.Close();
}
void DeSerialize(string file)
{
IFormatter formatter = new BinaryFormatter();
testClass ser = new testClass();
System.IO.FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
ser = (testClass)formatter.Deserialize(stream);
stream.Close();
}
}
BinaryFormatter
在序列化过程中考虑了有关程序集本身的各种信息,而不仅仅是类型的命名空间等。出现问题是因为您将类型移至新程序集,因此 "serialized" 表示不再正确。
请参阅 this question 以获取解决此问题的答案。
我的第一个程序集中有一个枚举类型,如下所示:
public enum MyEnum
{
ONE,
TWO,
THREE
}
因为我想扩展我的应用程序,所以我决定将其移动到另一个程序集 (dll) 并 link 将它移动到我的第一个程序集。
当我这样做时,我得到了一个奇怪的结果,当我对枚举在第一个程序集中时序列化的 类 进行消毒时,默认情况下它们都是 return 第一个枚举成员。
有解决办法吗? 我什至尝试像这样解析它:
(MyEnum)Enum.Parse(typeof(MyEnum), serializer.MyEnumType.ToString());
没有效果。
PS。我使用二进制序列化器,枚举在同一个命名空间中并且仍然具有相同的名称。
[Serializable]
public class testClass
{
public MyEnum En { set; get; }
}
public class test
{
void Serialize(string file)
{
testClass ser = new testClass();
IFormatter formatter = new BinaryFormatter();
System.IO.FileStream stream = new FileStream(file, FileMode.Create, System.IO.FileAccess.Write, FileShare.None);
formatter.Serialize(stream, ser);
stream.Close();
}
void DeSerialize(string file)
{
IFormatter formatter = new BinaryFormatter();
testClass ser = new testClass();
System.IO.FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
ser = (testClass)formatter.Deserialize(stream);
stream.Close();
}
}
BinaryFormatter
在序列化过程中考虑了有关程序集本身的各种信息,而不仅仅是类型的命名空间等。出现问题是因为您将类型移至新程序集,因此 "serialized" 表示不再正确。
请参阅 this question 以获取解决此问题的答案。