2015-05-28 4 views
0

У меня есть этот код.C# Сериализация, десериализация массива объектов

 const int maxbooks = 5; 
     Book[] booklist = new Book[maxbooks]; 

     FileStream fs = File.Open(@"books.txt", FileMode.Open, FileAccess.Read); 
     SoapFormatter sf = new SoapFormatter(); 

     try 
     { 

      // something here, deserializing file and assigning to the array 

     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     finally 
     { 
      fs.Close(); 
     } 

Я понял (или, по крайней мере, я думаю, я понял,), как сериализовать исходный массив объектов в виде отдельной программы. Теперь я хочу сериализовать это и создать новый массив с сериализованными данными. Просто для справки, вот другой файл, в котором я сериализовать исходный массив

 Book firstbook = new Book("Jimbob", "Jimbob book", "first edition", "Jimbob publishing", "1991"); 
     Book secondbook = new Book("Greg", "Greg book", "third edition", "Unholy publishing", "2010"); 
     Book thirdbook = new Book("Pingu", "Pingu book", "tenth edition", "Antarctic publishing", "1897"); 
     Book fourthbook = new Book("Patrick", "Patrick book", "seventh edition", "underwater publishing", "1991"); 
     Book fifthbook = new Book("Sally", "Sally book", "first edition", "Wowpublishing", "2015"); 


     const int maxbooks = 5; 

     Book[] booklist = new Book[maxbooks]; 
     booklist[0] = firstbook; 
     booklist[1] = secondbook; 
     booklist[2] = thirdbook; 
     booklist[3] = fourthbook; 
     booklist[4] = fifthbook; 


     // writing to a file 

     FileStream fs = File.Open(@"books.txt", FileMode.Create, FileAccess.Write); 
     SoapFormatter sf = new SoapFormatter(); 

     int bookindex = 0; 

     try 
     { 
      while (bookindex < maxbooks) 
      { 
       sf.Serialize(fs, booklist[bookindex]); 
       bookindex += 1; 
      } 
     } 

     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     finally 
     { 
      fs.Close(); 
     } 

Использование SOAP-сериализации на данный момент с этим. Любая помощь будет оценена.

+1

И вопрос в том, что? – Oscar

+0

«Теперь я хочу сериализовать это и создать новый массив с сериализованными данными». – iskelz

+0

Может быть, [это] (http://stackoverflow.com/questions/14675485/serialize-arraylist-of-objects) нить поможет вам. –

ответ

1

Сериализация самого массива, а не элемента. С помощью вашей процедуры serialiser вы создаете много фрагментов сериализации, которые не являются действительными вместе, добавленными в файл.

1

Использование XMLSerializer

Для примера. Serialize так:

private async Task SaveSettings(Settings settings) 
    { 

     var folder = Windows.Storage.ApplicationData.Current.LocalFolder; 
     var options = Windows.Storage.CreationCollisionOption.ReplaceExisting; 

     var file = await folder.CreateFileAsync("Settings.XML", options); 
     try 
     { 


      XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings)); 

      SerializerObj.Serialize(await file.OpenStreamForWriteAsync(), settings); 
     } 
     catch 
     { 
      // handle any kind of exceptions 
     } 

    } 

Deserialize так:

private async Task<Settings> LoadSettings() 
    { 
     Settings settings = new Settings(); 
     var folder = Windows.Storage.ApplicationData.Current.LocalFolder; 
     try 
     { 
      var file = await folder.GetFileAsync("Settings.XML"); 
      XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings)); 
      settings = SerializerObj.Deserialize(await file.OpenStreamForReadAsync()) as Settings; 
     } 
     catch (Exception ex) 
     { 
      // handle any kind of exceptions 
     } 
     return settings; 
    } 

Этот пример сериализует объект под названием Настройки. Вы можете изменить его для сериализации массива объектов.

Это из приложения Windows 8, поэтому вам может понадобиться немного приспособить его.

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