2015-03-19 80 views
0

我有一個枚舉類型在我的第一個組件,如下圖所示:移動枚舉到不同的裝配

public enum MyEnum 
{ 
    ONE, 
    TWO, 
    THREE 
} 

因爲我想延長我的申請,我決定來移動到不同的組件(DLL)和鏈接到我的第一個程序集。

當我這樣做時,我得到了一個奇怪的結果,當我滅絕當enum在第一個程序集中時序列化的類時,它們都默認返回第一個枚舉成員。

是否有解決方案如何解決這個問題? 我甚至嘗試解析它喜歡:

(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(); 
     } 
    } 
+0

顯示您的代碼。 – Steve 2015-03-19 02:37:50

+0

可能的重複:http://stackoverflow.com/questions/12737602/cant-deserialize-with-binaryformatter-after-changing-namespace-of-class – 2015-03-19 02:40:15

+0

另請參閱:http://stackoverflow.com/questions/25701481/is通過binaryformatter-after-chang – 2015-03-19 02:41:05

回答

2

BinaryFormatter考慮到有關大會本身的序列化過程,而不僅僅是類型的命名空間,這樣的各種信息。您的問題正在發生,因爲您已將該類型移至新程序集,因此「序列化」表示形式不再正確。

請參閱this question以獲得解決此問題的答案。

+0

更改程序集名稱似乎工作,謝謝。 – Glen 2015-03-19 04:23:51