2015-10-27 2 views
0

Я пытаюсь создать приложение, которое может как сериализовать, так и десериализовать данные, я могу сериализовать информацию, однако, когда я пытаюсь прочитать информацию, я остаюсь с пустым списком, и я не знаю почему.Deserialisation не удалось перечислить данные

Мой Сериализация класс

[Serializable()] 
    public class FileSerilizeObject 
    { 
     public static string FileName { get; set; } 
     public static string Extension { get; set; } 
     public static string Base64 { get; set; } 

     public FileSerilizeObject(string filename, string extension, string base64vaulue) 
     { 
      FileName = filename; 
      Extension = extension; 
      Base64 = base64vaulue; 
     } 

    } 
} 

Мои методы сериализации/десериализации

public void Serialize(List<FileSerilizeObject> List) 
     { 
      using (Stream stream = File.Open(savepath, FileMode.OpenOrCreate)) 
      { 
       BinaryFormatter bin = new BinaryFormatter(); 
       bin.Serialize(stream, List); 
       stream.Close(); 
      } 

     } 

     public List<FileSerilizeObject> Deserialised(string OpenPath) 
     { 
      List<FileSerilizeObject> defo; 
      using(Stream stream = File.Open(OpenPath, FileMode.Open)) 
      { 

       BinaryFormatter bin = new BinaryFormatter(); 
       defo = (List<FileSerilizeObject>)bin.Deserialize(stream); 
      } 

      return defo; 
     } 

Я проверил, чтобы убедиться, что файл пути правильны и что сам файл не пуст. Все прекрасно, но список «defo» всегда пуст, поэтому я могу только предположить, что проблема связана с линией defo = (List<FileSerilizeObject>)bin.Deserialize(stream);, но я не знаю почему.

ответ

0

Попробуйте установить атрибут [Serializable()] для каждого свойства.

Так это будет выглядеть следующим образом:

[Serializable()] 
public class FileSerilizeObject 
    { 
     [Serializable()] 
     public string FileName { get; set; } 
     [Serializable()] 
     public string Extension { get; set; } 
     [Serializable()] 
     public string Base64 { get; set; } 

     public FileSerilizeObject(string filename, string extension, string base64vaulue) 
     { 
      FileName = filename; 
      Extension = extension; 
      Base64 = base64vaulue; 
     } 

    } 
} 

EDIT: Удалены static ключевое слово из свойств.

+0

Компилятор говорит, что атрибут '[Serializable()]' недействителен для этого типа объявления. – Gerard2202

+0

Хорошо, поэтому вы пытаетесь сериализовать свойства 'FileName',' Extension' и 'Base64' класса' FileSerilizeObject', это правильно? – 321polorex123

+0

Да, я пытаюсь как сериализовать, так и десериализовать эту информацию. – Gerard2202

0

Вы должны удалить статический из ваших свойств

[Serializable] 
public class FileSerializeObject 
{ 
    public string FileName { get; set; } 
    public string Extension { get; set; } 
    public string Base64 { get; set; } 

    public FileSerializeObject(string filename, string extension, string base64vaulue) 
    { 
     FileName = filename; 
     Extension = extension; 
     Base64 = base64vaulue; 
    } 

} 
0

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

Некоторые детали: 1. Я удалил слово статической форме "FileSerilizeObject"

Класс FileSerilizeObject

[Serializable()] 
public class FileSerilizeObject 
{ 
    public string FileName { get; set; } 
    public string Extension { get; set; } 
    public string Base64 { get; set; } 

    public FileSerilizeObject(string filename, string extension, string base64vaulue) 
    { 
     FileName = filename; 
     Extension = extension; 
     Base64 = base64vaulue; 
    } 

} 

Функции

public static void Serialize(List<FileSerilizeObject> List) 
    { 
     using (Stream stream = File.Open(@"C:\Users\ttest\Desktop\folder1\data.bin", FileMode.OpenOrCreate)) 
     { 
      BinaryFormatter bin = new BinaryFormatter(); 
      bin.Serialize(stream, List); 
      stream.Close(); 
     } 

    } 

    public static List<FileSerilizeObject> Deserialised(string OpenPath) 
    { 
     List<FileSerilizeObject> defo; 
     using (Stream stream = File.Open(OpenPath, FileMode.Open)) 
     { 

      BinaryFormatter bin = new BinaryFormatter(); 
      defo = (List<FileSerilizeObject>)bin.Deserialize(stream); 
     } 

     return defo; 
    } 

Главная

var bytes = Encoding.UTF8.GetBytes("dffesdbcdef=="); 
     var base64 = Convert.ToBase64String(bytes); 
     FileSerilizeObject f1 = new FileSerilizeObject("test", "jpg", base64); 
     bytes = Encoding.UTF8.GetBytes("ggasddbcdef=="); 
     base64 = Convert.ToBase64String(bytes); 
     FileSerilizeObject f2 = new FileSerilizeObject("test2", "png", base64); 
     bytes = Encoding.UTF8.GetBytes("asddffasdasdasdesdbcdef=="); 
     base64 = Convert.ToBase64String(bytes); 
     FileSerilizeObject f3 = new FileSerilizeObject("test3", "doc", base64); 


     List<FileSerilizeObject> lFiles = new List<FileSerilizeObject>(); 
     lFiles.Add(f1); 
     lFiles.Add(f2); 
     lFiles.Add(f3); 


     Serialize(lFiles); 
     Deserialised(@"C:\Users\rjimen4x\Desktop\tutoriales\data.bin");