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

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

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

Доброго времени суток. помогите разобраться, есть классы ни как не связанные между собой, необходимо их сериализовать в один файл например 1.dat и десериализовать по мере необходимости. Сериализация проходит успешно, десериализация тоже если только я десериализую в том же порядке в каком и сериализовал. пример:
 [Serializable]
    public class C1
    {
        public string N { get; set; } = "C1";
    }
    [Serializable]
    public class C2
    {
        public Image Im { get; set; }
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            M1();
        }
        private void M1()
        {
            C1 p1 = new C1();
            C2 p3 = new C2();
            p3.Im = Image.FromFile(@"C:\1.jpg");
 
            BinaryFormatter formatter = new BinaryFormatter();
            using (FileStream fs = new FileStream("1.dat", FileMode.OpenOrCreate))
            {
                formatter.Serialize(fs, p1);
                formatter.Serialize(fs, p3);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            C2 im = new C2();
            BinaryFormatter formatter1 = new BinaryFormatter();
            using (FileStream fs = new FileStream("1.dat", FileMode.OpenOrCreate))
            {
                label1.Text = ((C1) formatter1.Deserialize(fs)).N;
                im = (C2) formatter1.Deserialize(fs);
                pictureBox1.Image = im.Im;
            }
        }
    }
все отлично как только я убираю
label1.Text = ((C1) formatter1.Deserialize(fs)).N;
в рантайме получаю соответственно ошибку приведения типов. Вопрос как правильно организовать сохранение этих объектов в одном файле. Или же каким другим способом можно хранить разные данные в одном бинарном файле, например, картинки, мелодии, данные - и соответственно считывать их.

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

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

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


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

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

11   голосов , оценка 4.182 из 5
Похожие ответы