Serializacja obiektu z polem nieserializowalnym

0

chciałem wykonać zapamiętywanie ustawień aplikacji w formie zapisywania obiektu klasy Ustawienia do pliku, problem w tym, że jedno z pól klasy a konkretnie SerialPort nie zostało przewidziane do serializacji, jak to obejść?

    [Serializable]
    public class Ustawienia {

        private SerialPort bluetoothSerialPort; 

        public Ustawienia()
        { this.bluetoothSerialPort = new SerialPort("COM1",9600,Parity.None,8,StopBits.One);
            //2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, 115200, 230400 } = 0% @ 11,0592MHz
        }

        public void setBluetoothSerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        { this.bluetoothSerialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits); }

        public SerialPort getBluetoothSerialPort()
        { return this.bluetoothSerialPort; }
} 
...
        private void btnSerialize_Click(object sender, EventArgs e)
        {
            try
            {
                fs = new FileStream("ustawienia_save", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                ustawienia.setBluetoothSerialPort("COM8", 4800, Parity.None, 8, StopBits.One);
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, ustawienia);
                fs.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

komunikat:Type 'System.IO.Ports.SerialPort' in Assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

0

może komuś się przyda, albo ktoś mnie oświeci, że można to było zrobić inaczej...
ponieważ pola SerialPort nie można poddać serializacji, pozbyłem się jej z klasy, ustawianie portu nastąpi w metodzie Form_Load
klasa Ustawienia przechowuje teraz jedynie kilka potrzebnych pól sklonowanych z klasy SerialPort, wszystkie będą zmieniane runtime, dlatego wszystko publiczne, metody dla komfortu
działa jak należy

     
    [Serializable]
    public class Ustawienia 
    {
                public BTconf bluetoothSerialPortSettings;
                // tu będą inne ustawienia

        public Ustawienia()
        { this.bluetoothSerialPortSettings = new BTconf(); }
    }

    [Serializable]
    public class BTconf 
    {

                public string portName;
                public int baudRate;
                public Parity parity;
                public int dataBits;
                public StopBits stopBits;

        public BTconf()
        { this.portName = "COM1";
        this.baudRate = 9600;            // 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, 115200, 230400 } = 0% @ 11,0592MHz
        this.parity = Parity.None;
        this.dataBits = 8;
        this.stopBits = StopBits.One;
        }

        public BTconf(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        {
            this.portName = portName;
            // i tak dalej...
        }
        
        public SerialPort getSerialPortFromSettings()
        { return new SerialPort(this.portName, this.baudRate, this.parity, this.dataBits, this.stopBits); }

        public void setSettingsFromSerialPort(SerialPort port)
        {
            this.portName = port.PortName;
            // i tak dalej...
        }

        public void setSettingsFromParameters(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        {
            this.portName = portName;
            // i tak dalej...
        }
    }
}

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