Serializacja czy ręczne tworzenie dokumentu XML?

0

Witam,
Posiadam klasę, która dziedziczy z ListViewItem i obiekty tej klasy umieszczam na komponencie ListView.
Chcę importować/eksportować elementy tej listy z/do pliku XML. W związku z tym mam pytanie: Czy lepiej (bardziej optymalnie / elegancko) zapisywać ręcznie do XMLDocument po kolei obiekty z ListView, czy skorzystać z gotowych mechanizmów serializacji i eksportować całą instancję klasy ListView?

Generalnie zależy mi, by jak najwięcej nauczyć się przy tym projekcie - jednak nie jestem pewien, czy jest sens pisania całej obsługi dokumentu XML, czy może lepiej użyć serializacji.

Dziękuję i pozdrawiam.

0

Wszystko jedno. W jednym i drugim przypadku się czegoś nauczysz. Co do „optymalnie” - i tak najwolniejszy ze wszystkiego będzie sam zapis na dysk.
Własny XML się robi, gdy chcemy mieć większą kontrolę nad wyglądem wynikowego XML-a. Serializacji, gdy nas to nie obchodzi, a chcemy mieć wszystko szybko z automatu. Ale już zmuszenie serializera do konkretnego formatu wynikowego pliku może być mocno upierdliwe.

0

Dziękuję za odpowiedź.

There was an error reflecting type 'System.Windows.Forms.ListView'.

Całej kontrolki nie da się serializować. ItemCollection - także nie. Spróbowałem więc stworzyć zwykłą listę (List<>) przechowującą obiekty z niej - i znów to samo.

W jaki sposób powinienem to zrobić?

0

Dlaczego chcesz serializować obiekty GUI? Sensu to nie ma żadnego - one służą do wyświetlania/wprowadzania danych. Nie ma sensu mieszać prezentacji z logiką aplikacji.

Powinieneś mieć jakąś swoją klasę do przechowywania danych. Gdy użytkownik będzie chciał te dane wyświetlić, to mu je wyświetlisz w ListView. A gdy będzie chciał zapisać na dysku, to je zserializujesz.

0

Hmm, chciałem przechowywać je w List<>, jednakże również w ten sposób serializacja się nie udaje. I prawdę mówiąc - nie wiem dlaczego...

0

Twoje T musi być Serializable.

0

@somekind napisał

Dlaczego chcesz serializować obiekty GUI? Sensu to nie ma żadnego - one służą do wyświetlania/wprowadzania danych.

Jeżeli wygląd ekranu mocno zależy od preferencji użytkownika, serializacja jest chyba najprostszym sposobem zapamiętania tych preferencji.

0

Mam klasę:

public class Element : ListViewItem
    {
        public string IP;
        public int port;
        public bool encryption;
        public Element() {}

I chciałbym ją zserializować do XML.

XmlSerializer serializer = new XmlSerializer(typeof(Element));

Wyrzucany jest błąd:
There was an error reflecting type 'Proj1.Element'.

Jak to rozwiązać?

Dziękuję.

0
bo napisał(a)

Jeżeli wygląd ekranu mocno zależy od preferencji użytkownika, serializacja jest chyba najprostszym sposobem zapamiętania tych preferencji.

AFAIK do tego służą inne mechanizmy, związane z konkretną technologią GUI.
Poza tym, z tego co rozumiem, autorowi chodzi o coś innego - o zapis danych, które trzyma w obiektach GUI.

Pawel_mv napisał(a)

Jak to rozwiązać?

Nie dziedzicz z ListViewItem. Skoro nie możesz serializować tej klasy, to pochodnych także nie możesz.

1

Wyrzucany jest błąd:

Rev.pl napisał(a)

Twoje T musi być Serializable.

...
http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx

ListViewItem nie jest serialisable, twój item też nie będzie mógł być serialisable.

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