.NET 4.x Сериализация разнородных объектов - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. помогите разобраться, есть классы ни как не связанные между собой, необходимо их сериализовать в один файл например 1.dat и десериализовать по мере необходимости. Сериализация проходит успешно, десериализация тоже если только я десериализую в том же порядке в каком и сериализовал. пример:
Листинг программы
  1. [Serializable]
  2. public class C1
  3. {
  4. public string N { get; set; } = "C1";
  5. }
  6. [Serializable]
  7. public class C2
  8. {
  9. public Image Im { get; set; }
  10. }
  11. public partial class Form1 : Form
  12. {
  13. public Form1()
  14. {
  15. InitializeComponent();
  16. M1();
  17. }
  18. private void M1()
  19. {
  20. C1 p1 = new C1();
  21. C2 p3 = new C2();
  22. p3.Im = Image.FromFile(@"C:\1.jpg");
  23. BinaryFormatter formatter = new BinaryFormatter();
  24. using (FileStream fs = new FileStream("1.dat", FileMode.OpenOrCreate))
  25. {
  26. formatter.Serialize(fs, p1);
  27. formatter.Serialize(fs, p3);
  28. }
  29. }
  30. private void button1_Click(object sender, EventArgs e)
  31. {
  32. C2 im = new C2();
  33. BinaryFormatter formatter1 = new BinaryFormatter();
  34. using (FileStream fs = new FileStream("1.dat", FileMode.OpenOrCreate))
  35. {
  36. label1.Text = ((C1) formatter1.Deserialize(fs)).N;
  37. im = (C2) formatter1.Deserialize(fs);
  38. pictureBox1.Image = im.Im;
  39. }
  40. }
  41. }
все отлично как только я убираю
Листинг программы
  1. label1.Text = ((C1) formatter1.Deserialize(fs)).N;
в рантайме получаю соответственно ошибку приведения типов. Вопрос как правильно организовать сохранение этих объектов в одном файле. Или же каким другим способом можно хранить разные данные в одном бинарном файле, например, картинки, мелодии, данные - и соответственно считывать их.

Решение задачи: «.NET 4.x Сериализация разнородных объектов»

textual
Листинг программы
  1. public class DataInfo
  2. {
  3.     Type TypeData {get;set;} - тип хранимых данных (клас в который нужно делать сереализацию)
  4.     uint Offset {get;set;} - смещение в сегменте данных
  5.     uint Size{get;set;} - размер сереализованных данных
  6. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы