2015-03-19 3 views
0

У меня есть тип перечисления в моей первой сборке, как показано ниже:Перемещение перечислений в другую сборку

public enum MyEnum 
{ 
    ONE, 
    TWO, 
    THREE 
} 

Так как я хотел продлить мое заявление, я решил перенести, что другую сборку (DLL) и свяжите его с моей первой сборкой.

Когда я это делаю, я получаю странный результат, когда я дестилизую классы, которые были сериализованы, когда перечисление было в первой сборке, все они возвращают первый член перечисления по умолчанию.

Есть ли решение о том, как это исправить? Я даже пытался разобрать это нравится:

(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

+0

Возможный дубликат: http://stackoverflow.com/questions/12737602/cant-deserialize-with-binaryformatter-after-changing-namespace-of-class –

+0

Также см .: http://stackoverflow.com/questions/25701481/is -it-possible-to-recover-an-object-serialized-by-binaryformatter-after-chang –

ответ

2

BinaryFormatter учитывает различную информацию о самой сборки в процессе сериализации, пространство имен не только тип и такие. Ваша проблема возникает, потому что вы переместили тип на новую сборку, чтобы «сериализованное» представление перестало быть правильным.

См. this question для ответа на эту проблему.

+0

Изменение названия сборки, похоже, работает, спасибо. – Glen

Смежные вопросы