2014-01-09 9 views
0

Я пытаюсь сериализовать массив объектов и строку. Это код сериализации:Как сериализовать несколько объектов разных типов?

FileStream s; 
s = new FileStream(savefile.FileName, FileMode.Create, FileAccess.Write); 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(s, ch.chaps); 
bf.Serialize(s, txtPassword.Text); 
s.Close(); 

Это код десериализации:

FileStream s; 
s = new FileStream(openfile.FileName, FileMode.Open, FileAccess.Read); 
BinaryFormatter bf = new BinaryFormatter(); 
string password = (string)bf.Deserialize(s); 
ch.chaps = (Chapter[])bf.Deserialize(s); 
s.Close(); 
int i; 

if (password == txtPassword.Text) 
{ 
    for (i = 0; i <= 1000; i++) 
    { 
     try 
     { 
      combChapSelect.Items.Add(ch.chaps[i].chapName);   
     } 
     catch 
     { 
      i = 1000; 
     } 
    } 
} 

Это код и Visual Studio говорит, что нет никаких ошибок, но OpenFileDialog не закрывается, когда я выбираю файл и ничего не происходит. Я сделал что-то неправильно или есть другой способ сериализации разных типов объектов?

+0

Является ли глава, реализующая ISerializable? Вы говорите, что пытаетесь «сериализовать», но в коде, который вы называете «deserialize». Так вы пытаетесь сериализовать или десериализовать? –

ответ

1

Вы делаете это назад. Вы должны десериализоваться в том же порядке, который вы сериализуете.

В вашей сериализации, ее chaps-then-password. В вашей десериализации, его пароль-то-главы.

+0

Спасибо! Это сработало. Я не знал, что этот порядок имеет значение. – Serenical

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