Brak możliwości serializacji do XML

0

Witam. Mam problem z serializacją do xml.

Tak wygląda mój kod który zapisuje.

        public void zapisz(Object element)
        {
            StreamWriter writer = new StreamWriter("person.xml");
            XmlSerializer serializer = new XmlSerializer(typeof(Sklep));
            serializer.Serialize(writer, element);
            writer.Close();
        } 

plus następnie, próbuję zapisać:

            Klient abc = new Klient(1,"Adam","Szkudlarek");
            xml.zapisz(abc); 

W efekcie otrzymuję:

  • $exception {"Wystąpił błąd podczas generowania dokumentu XML."} System.Exception {System.InvalidOperationException}

Zatrzymuje się na linijce:
serializer.Serialize(writer, element);

Zależy mi ,żeby serializacja była dostępna dla różnych typów, bym mógł przekazać każdy obiekt jako parametr serializacji.

0

Czesc,
a jestes pewien ze chcesz Klienta w Sklep "zserializowac"? Masz do tego konstruktor? Zajrzyj w Details twojego bledu, tam bedzie wyjasnienie co nie gra.
Prawdopodobnie nie mozesz zamienic Klienta na Sklep ;)
Pozdro

0

Może inaczej - aktualnie mam zrobioną hierarchie klas w której posiadam: Sklep, Glowna, Klient, Rachunek, Produkt. W Sklepie posiadam listę klientów, Dictionary Produktów oraz ObservableCollection Rachunkow. W Glownej jest main w ktorej tworze instancje klasy Sklep. Chciał bym wszystko co posiada sklep zserializować. Aktualny kod mam:

 public class Sklep : IKlient, IProdukt, IRachunek, IWKlient, IWProdukt, IWRachunek
    {
        public List<Klient> listKlienci = new List<Klient>();
        public Dictionary<int,Produkt> diProdukty = new Dictionary<int,Produkt>();
        public ObservableCollection<Rachunek> ocRachunki = new ObservableCollection<Rachunek>();

W każdej klasie mam konstuktory + konstruktor bezargumentowy. Pola są publiczne. Klasy posiadają [Serializable]

W Glownej posiadam:

             Sklep sklep = new Sklep();
            SerializeToXML xml = new SerializeToXML();
            xml.zapisz(sklep);

Zapis xml :

 public void zapisz(Sklep element)
        {
            StreamWriter writer = new StreamWriter("person.xml");
            XmlSerializer serializer = new XmlSerializer(typeof(Sklep));
            serializer.Serialize(writer, element);
            writer.Close();
        }

Gdy sama lista Klientow jest public to wszystko zapisuje, lecz sypie się na tamtych dwóch kolekcjach i nie wiem o co chodzi...

0

Sorry tylko w Dictionary jest problem

0

Bo standardowe Dictionary się po prostu nie serializuje. Musisz napisać sobie swój własny słownik, który będzie umiał się zserializować.

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