Deserializacja binarna

0

Witam serdecznie!

Pisze do Was drodzy koledzy w sprawie, z którą mecze się już od kilku ładnych godzin(?), otóz dokonałem serializacji klasy:

 [Serializable]
    class UstawieniaKonfiguracyjne
    {
        bool chBoxStat_in;
        int deviceNumber_in;
        int chStart_in;
        int chCount_in;
        int vrgValue_in;       

        public  UstawieniaKonfiguracyjne(bool chB_in, int dNu_in, int chS_in, int chC_in, int vVa_in)
        {
            this.chBoxStat_in = chB_in;
            this.deviceNumber_in = dNu_in;
            this.chStart_in = chS_in;
            this.chCount_in = chC_in;
            this.vrgValue_in = vVa_in; 
        }
    }

W ten sposób:

 private void bSerializacja_Click(object sender, EventArgs e)
        {
            FileStream fs = new FileStream(@"config.bin", FileMode.Create);
            BinaryFormatter bf = new BinaryFormatter();
            UstawieniaKonfiguracyjne cfg = new UstawieniaKonfiguracyjne(true, 1, 1, 1, 1);
            bf.Serialize(fs, cfg);
            fs.Close();
        }

I jest to wykonane w formie CfgForm inicjowanej przez formę główną programu.
Teraz w głównej formie chciałbym przeprowadzić deserializację, wydobyć zmienne (true,1,1,1) i przypisać je do zmiennych w strukturze w formie głownej:

public struct cfgDefaultValues //Podtawowa konfiguracja programu
    {
        int deviceNumber_in { get; set; }
        int chStart_in { get; set; }
        int chCount_in { get; set; }
        int vrgValue_in { get; set; }
    }

Deserializacje wykonuje w ten sposób:

private void bDeserializacja_Click(object sender, EventArgs e)
        {
            UstawieniaKonfiguracyjne config = null;
            FileStream fs = new FileStream(@"config.bin", FileMode.Open);
            try
            {
                BinaryFormatter bf = new BinaryFormatter();
                config = (UstawieniaKonfiguracyjne)bf.Deserialize(fs);
            }
            catch (SerializationException s)
            {
                MessageBox.Show("Wystapił błąd przy wczytywaniu pliku konfiguracyjnego, szczegóły: \n /n" + s.ToString());
                throw;
            }
            finally
            {
                fs.Close();
            }

I z tym własnie mam problem, bo otrzymuje obiekt klasy UstawieniaKonfiguracyjne, i nie wiem co dalej z tym zrobić jak próbuje zapisać:
MessageBox.Show(config.ToString());
Żeby "podejrzeć" co on "deserializuje to wypisuje tylko:

"AnalogDigitalThreadCalc.UstawieniaKonfiguracyjne" i to wszytsko, rozumiem ze użycie messageboxa jest bez sensu ale chciałem "TYLKO" podejrzeć co wypisze, jak odwołać się do zmiennych zdeserializowanego strumienia binarnego? Czy robię coś źle, w necie sa tylko przykłady deserializacji gdzie występują tablice a tu chodzi tylko o te pięć zmiennych.

Z góry dziękuje.
Oskar

0

piszesz config. i po kropce wyświetlają ci się wszystkie dostępne pola i metody tego obiektu
Ale dostaniesz tylko konstruktor bo w klasie

[Serializable]
    class UstawieniaKonfiguracyjne
    {
        bool chBoxStat_in;
        int deviceNumber_in;
        int chStart_in;
        int chCount_in;
        int vrgValue_in;       
 
        public  UstawieniaKonfiguracyjne(bool chB_in, int dNu_in, int chS_in, int chC_in, int vVa_in)
        {
            this.chBoxStat_in = chB_in;
            this.deviceNumber_in = dNu_in;
            this.chStart_in = chS_in;
            this.chCount_in = chC_in;
            this.vrgValue_in = vVa_in; 
        }
    }
  

nie masz żadnych metod dostępu do zmiennych prywatnych.
Musisz dopisać np.

public int getDeviceNumber()
{
     return deviceNumber_in;
}

albo zadeklarować zmienne jako:

public readonly deviceNumber_in;//wtedy masz możliwość ich czytania
0

Kolego, wielkie dzięki... należy Ci się DUŻE piwko....

A tak po za tematem, czy jest jakiś sposób na sprawdzanie czy w formie przy zmianach automatycznie program to wychwytuje, czyli odznaczę checkBoxa i w tym momencie przechwytuje ten event przez co mogę "włączyć" przycisk "OK"?

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