Cześć. Mam problem z deserializacją pliku XML. Zapisywany jest (wydaje mi się) poprawnie, po otworzeniu wygląda OK. Jednak za chiny ludowe, nie mogę wczytać go w programie.
Oto klasa, która odpowiada za Zapisywanie/Wczytywanie pliku
class Saver
{
private string filesPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + Path.DirectorySeparatorChar + "folder" + Path.DirectorySeparatorChar;
public Saver() {}
public void save(Plik plik) {
XmlSerializer serializer = new XmlSerializer(typeof(Plik));
using (Stream output = File.OpenWrite(filesPath + pies.fileName))
{
serializer.Serialize(output, plik);
}
}
public Plik load(string nazwa_pliku) {
XmlSerializer deserializer = new XmlSerializer(typeof(Plik));
using (Stream input = File.OpenRead(filesPath + nazwa_pliku))
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.CheckCharacters = false;
Plik lokalny_plik = (Plik)deserializer.Deserialize(XmlReader.Create(input, settings));
return lokalny_plik;
}
}
}
A tutaj klasa przeznaczona do serializacji:
[Serializable]
public class Plik
{
public string fileName { get; set; }
[XmlArray]
public List<Typ1> lista_1 { get; set; }
[XmlArray]
public List<Typ2> lista_2 { get; set; }
}
Błąd wyrzuca przy linijce
wczytany_plik = saver.load(this.pobierzNazwePliku());
A sama nazwa pliku pobierana jest z bazy danych (MySql):
private string pobierzNazwePliku()
{
string query = @"SELECT * FROM `nazwa_bazy`.`tabela` WHERE `id`='" + index +"'";
MySqlDataReader reader;
connection.Open();
string nazwa_pliku = "";
try
{
using (MySqlCommand command = new MySqlCommand(query, connection))
{
reader = command.ExecuteReader();
DataTable table = new DataTable();
table.Load(reader);
if (reader.HasRows)
{
foreach (DataRow row in table.Rows)
{
nazwa_pliku = row["nazwa_pliku"].ToString();
}
}
}
}
catch (MySqlException)
{
MessageBox.Show("Błąd logowania do bazy danych", "Błąd");
}
finally
{
connection.Close();
}
return nazwa_pliku;