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.
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:
Jak widać zgadza się.