C# Deserializacja obiektów XML

0

Witam, mam problem z deserializacją obiektów. Samą serializację mam, polega ona na tym że zapisuje w formacie XML wszystkie obiekty klasy Zadanie pobierane ze statycznej listy "zadania". Plik xml ładnie się generuje, tylko nie mam pojęcia jak mam dane z pliku XMLowego zamienić ponownie na obiekty i wpisać je z powrotem do Listy? Podsyłam kodzik :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
namespace MP1
{
[Serializable]
   public class Zadanie
    {
        public String opis;
        public int czas;
        public static Boolean wymagasprawdzenia = true;
        public static List <Zadanie> zadania = new List<Zadanie>();
        public Zadanie(String opis, int czas)
        {
            this.opis = opis;
            if (wymagasprawdzenia == true)
            {
               this.czas = czas*2;
            }
            else
            {
                this.czas = czas;
            }
                addZadanie(this);
               
        }
        public Zadanie()
        {

        }
        
        public String toString()
        {
            return "Opis: " + this.opis + " Czas wykonania w min: " + this.czas;
        }
        private static void addZadanie(Zadanie zad)
        {
            zadania.Add(zad);
        }
        private static void removeZadanie(Zadanie zad)
        {
            zadania.Remove(zad);
        }
    //METODA KLASOWA
        public static void showAll()
        {
            Console.WriteLine("Ekstensja klasy Zadanie: ");
            foreach (Zadanie zad in zadania)
            {
                Console.WriteLine(zad.toString());
            }
        }
        public static void SerializeToXml()
        {
           
            StreamWriter writer = new StreamWriter("c:\\test.xml");
            XmlSerializer serializer = new XmlSerializer(typeof(List<Zadanie>));
            
            serializer.Serialize(writer, zadania);
            writer.Flush();
            writer.Close();

            
        }
        public static void DeserializeFromXml()
        {
           
            StringReader reader = new StringReader(@"C:\Xml.xml");

            XmlSerializer deserializer = new XmlSerializer(typeof(List<Zadanie>));
            object obj = deserializer.Deserialize(reader);
            List<Zadanie> xmldata = (List<Zadanie>)obj;

            
        }
    }
}
 
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MP1
{
    class Glowna
    {

        static void Main(string[] args)
        {
            AirCraft ac = new AirCraft("Boeing", "WWE2222");
            ac.wyswietlinfo();
            Adres ad = new Adres("Łochów", "Jasiorówka", "07-130", 81);
            Adres ad1 = new Adres("Warszawa", "Sielecka", "02-111", 55, 51);
            Mechanik mech = new Mechanik("Hubert","Grotkowski","1994/09/21");
            
           
            mech.setAdres(ad);
            mech.Wyswietlinfo();
           
            
            Console.ReadKey();
            ac.addZadanie(new Zadanie("Wymiana kół", 90));
            ac.addZadanie(new Zadanie("Wymiana szyb", 90));
            ac.addZadanie(new Zadanie("Wymiana oleju", 90));
            Zadanie zad = new Zadanie("Wstawienie szyb", 120);
            ac.wyswietlinfo();
            Console.ReadKey();
            Zadanie.showAll();
            Console.ReadKey();
            Zadanie.SerializeToXml();
           
            /*Zadanie.showAll();
            Console.ReadKey();
            Zadanie.DeserializeFromXml();
            Zadanie.showAll();
            Console.ReadKey(); */
       }
    }
}
1

Nie

StringReader reader = new StringReader(@"C:\Xml.xml");

tylko StreamReader reader = new StreamReader(@"C:\Xml.xml");


A poza tym to przepisz to co masz tylko tym razem nie używaj `static`. Zastanów się po cholerę masz `private static void addZadanie/removeZadanie`. Jak wyciągniesz obiekt po deserializacji? Do każdej nowej klasy będziesz pisał od nowa `public static void DeserializeFromXml/SerializeToXml`? Stwórz jedną klasę do serializacji/deserializacji używając typów generycznych. itd...
0

Wielkie dzięki m8 działa! A odnośnie staticow to faktycznie nie są tu potrzebne. A odnośnie serializacji chcę zrobić oddzielną klasę ObjectPlus, ale teraz chciałem to tylko przetestować na jednej. Problem rozwiązany :)

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