Deserializacja oraz błąd: are you missing a using directive or an assembly reference?

0

Witam,

Problem dotyczy programu pocztowego który robię - podczas próby deserializacji otrzymuję błąd który jest w temacie (podkreśla że nie może znaleźć definicji do sett.x gdzie x to np nazwaUzytkownika). Wszystko jest w public bym miał pewność że błąd nie pochodzi z braku dostępu do danej metody przez inną.

Oto kod:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;
using System.Xml.Serialization;
using System.IO;

namespace NetBuddy
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            string istnieje = "data.xml";
            if (File.Exists(istnieje))
            {
                XmlSerializer x = new XmlSerializer(typeof(List<ustawienia>));
                FileStream f = new FileStream("data.xml", FileMode.Open);
                List<ustawienia> sett = (List<ustawienia>)x.Deserialize(f);
                f.Close();

                wyslij(sett);
            }
            else
            { }           
        }

        public void wyslij(List<ustawienia> sett)
        {
            SmtpClient client = new SmtpClient(sett.adresSmtp, Convert.ToInt32(sett.portSmtp));
            client.EnableSsl = sett.ssl;
            client.Credentials = new NetworkCredential(sett.nazwaUzytkownika, sett.haslo);

            int seek = sett.adresPop3.IndexOf(".");
            string andDestroy = sett.adresPop3.Remove(0, ++seek);

            sett.nazwaUzytkownika = sett.nazwaUzytkownika + "@" + andDestroy;

            MailMessage msg = new MailMessage();
            msg.From = new MailAddress(sett.nazwaUzytkownika);
            msg.To.Add(new MailAddress(textBox1.Text));
            msg.Subject = textBox3.Text;
            msg.Body = richTextBox1.Text;

            try
            {
                client.Send(msg);
                MessageBox.Show("Wiadomość wysłano!");
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Nie można wysłać wiadomości z podanej przyczyny: " + ex.Message);
            }
        }

        public class ustawienia
        {
            public string nazwaUzytkownika;
            public string haslo;
            public bool ssl;
            public string adresSmtp;
            public string portSmtp;

            public ustawienia()
            { }

            public ustawienia(string nNazwaUzytkownika, string nHaslo, bool nSsl, string nAdresSmtp, string nPortSmtp)
            {
                nazwaUzytkownika = nNazwaUzytkownika;
                haslo = nHaslo;
                ssl = nSsl;
                adresSmtp = nAdresSmtp;
                portSmtp = nPortSmtp;
            }
        }
    }
}
 

Pozdrawiam.

0
  1. klasa ustawienia nie jest oznaczona jako Serializable

List<ustawienia> sett
sett.adresSmtp
hmmm ciekawe
przeczytaj sobie jak uzywa sie List<T>
metoda wyslij jest to bani

0

Nie dziwię się że jest do bani, bo skopiowałem ją z wcześniejszej wersji kodu nie poprawiając jej (wcześniejsza wersja nie była podzielona na metody tylko była na zasadzie if jest xml to rób to (tutaj kod) - więc poświęciłem jej nie więcej niż minutę. Spróbuję zrobić tak jak mówisz jak wrócę do domu.

0
sett.nazwaUzytkownika

przecież sett jest List<‌ustawienia>

 a nie <code noframe>ustawienia

!
Nie można siędo całej listy odwoływać jak do pojedynczego elementu.

0

Rzeczywiście! Zbyt ślepo patrzyłem na to pod kątem starej wersji. Myślę że dzięki temu problem będzie rozwiązany.

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