Deserializacja klasy z XML

Odczyt stanu programu z poprzedniej sesji jest podstawową funkcjonalnością oprogramowania dzisiejszych czasów. Nikt chyba nie wyobraża sobie sytuacji gdy po zamknięciu programu i ponownym jego uruchomieniu trzeba wklepać wszystko od nowa. W tym wpisie pokażę jak odczytać dane, które zapisaliśmy (serializowaliśmy) do pliku XML.

Mamy plik person.xml, który zawiera dane obiektu klasy Person. Dla przypomnienia klasa Person i plik xml po serializacji obiektu klasy Person:

    public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public DateTime DateOfBirth { get; set; }

        public Person()
        {

        }

        public Person(string name, string surname, DateTime birthdate)
        {
            this.Name = name;
            this.Surname = surname;
            this.DateOfBirth = birthdate;
        }
    }
<?xml version="1.0"?>
<Person xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema">
  <Name>Monika</Name>
  <Surname>Malec</Surname>
  <DateOfBirth>1952-04-02T00:00:00</DateOfBirth>
</Person>

W celu deserializacji danych z pliku XML do obiektu klasy Person tworzymy metodę deserializującą dane i zwracającą je w postaci obiektu, który będziemy rzutować na obiekt klasy Person:

        public static object DeserializePerson()
        {
            string filename = "person.xml";
            var serializer = new XmlSerializer(typeof(Person));

            using(var stream = File.OpenRead(filename))
            {
                return serializer.Deserialize(stream);
            }
        }

W kodzie wykorzystamy metodę deserializującą dane w następujący sposób. Utworzymy obiekt klasy Person a następnie przypiszemy do niego dane zwracane przez metodę DeserializePerson:

            Person newPerson;

            newPerson = (Person)DeserializePerson();

Zobaczmy czy to działa. Ustawiam breakpoint w kodzie tak by zobaczyć stan obiektu newPerson i oglądamy dane w nim zawarte w zakładce „Watch”. Jak widać dane z pliku zostały odczytane.
watch1

Dla pewności zmienię jeszcze dane w pliku person.xml i ponownie odczytam jego zawartość by sprawdzić czy wszystko działa tak jak należy. Plik xml po zmianach:

<?xml version="1.0"?>
<Person xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema">
  <Name>XXX</Name>
  <Surname>YYY</Surname>
  <DateOfBirth>2018-01-01</DateOfBirth>
</Person>

Stan obiektu newPerson po deserializacji:
watch2

Jak widać zgadza się.

Autor: gervee

Pełnoetatowy ojciec małej gromadki, programista(?), "amator" fotograf, "dłubacz" lubiący DIY, miłośnik chmielonego napitku. "Żartowniś" bez poczucia humoru ;).

Dodaj komentarz