[C#] Deserializacja klasy

0

Witam,

       Mam problem z deserializacją klasy. Oto kod:

Form1.cs

    public partial class Form1 : Form
    {
        private FormEngine engine;
        private Klasa2 poszukiwacz;

        public Form1(FormEngine engine1)
        {
            engine = engine1;
            poszukiwacz = new Klasa2(engine);
            Deserializuj();
         }


        private void Deserializuj()
        {
            if (System.IO.File.Exists("Serialized"))
            {
                try
                {
                    IFormatter formatter = new BinaryFormatter();
                    Stream fileStream = new FileStream("Serialized", FileMode.Open, FileAccess.Read);
                    poszukiwacz = (Klasa2)formatter.Deserialize(fileStream);
                    fileStream.Close();
                }
                catch
                {
                }
            }
     }

Klasa2.cs

    [Serializable]
    public class Klasa2
    {
        [NonSerialized]private FormEngine engine;
    
        public Szukacz(FormEngine engine1)
        {
            engine = engine1;
        }
      }

Celowo jest

[NonSerialized]private FormEngine engine;

gdyż w FormEngine przechowuję dane, które muszą być zmienione za każdym razem gdy włączam aplikacje.

I tutaj jest problem, gdy chcę wywołać jakąś funkcję z Klasa2, chociażby MessageBox.Show(engine.jakaszmienna); dostaję komunikat

Object reference not set to an instance of an object.

0

Deserializacja na pewno nie użyje konstruktora z parametrem. Engine jest null - tak jak chciałeś. Nie za bardzo rozumiem - myślałeś, że jak to będzie działać ?

engine.jakaszmienna - jest exception ponieważ engine == null.

0

No to zostało ręczne zapisywanie zmiennych(chyba)

0

Możesz jeszcze do Klasa2 dodać funckcję

public void SetEngine(FormEngine engine1)
{
          engine = engine1
}

a po deserializacji jej użyć

1 użytkowników online, w tym zalogowanych: 0, gości: 1