Dwie rzeczy, które warto wiedzieć o serializacji w C#

Serializacja w C# to nie tylko dodanie atrybutu Serializable.

Serializacja do postaci binarnej czyli:

IFormatter formatter = new BinaryFormatter();
formatter.Serialize(str, dto);

Przyjmie prawie wszystko, co jej dostarczymy.

Jednak serializacja do XML za pomocą:

XmlSerializer x = new XmlSerializer(dto.GetType());
x.Serialize(str, dto);

Już nie.

1) XmlSerializer nie trawi interfejsów.

Co w tej sytuacji zrobić, jeżeli w klasie do serializacji jest właściwość będąca interfejsem? Trzeba wstawić między interfejs a klasy dziedziczące klasę abstrakcyjną, serializowalną i dodać “czystą” implementację tej klasy, aby serializer wiedział czym w razie czego się uczepić:

[XmlInclude(typeof(ImplementedWorker))]

Szczegóły tutaj. Cytując:

   public interface IWorker
   {
       string WorkerName { get; set; }
   }

   [Serializable]
   [XmlInclude(typeof(ImplementedWorker))]
   public abstract class WorkerBase : IWorker
   {
       public abstract string WorkerName { get; set; }
   }

   [Serializable]
   public class ImplementedWorker : WorkerBase
   {
       #region IWorker Members
       public override string WorkerName { get; set; }
       #endregion
   }
   [Serializable]
   public class WorkToDo
   {
       public WorkerBase Worker;
   }



2) Dictionary nie jest serializowane przez XmlSerializer

Szczegóły na blogu Paula Weltera.
Wybaczcie ale nie będę cytował, ale sami znajdziecie nawet jakby kiedyś tego bloga nie było.
Nazwa klasy to SerializableDictionary.

Przeczytaj też

Najlepsza książka do Pythona Nie wiesz, z jakiej książki/ebooka uczyć się programowania w języku Python? Postanowiłem zrobić zestawienie 10 książek z Heliona na ten temat, abyś mó...
Komplet 28 ebooków i kursów, aby zostać programist... Od jakiegoś czasu dostaję zapytania na temat tego jakie książki, kursy i ebooki polecam. W związku z tym postanowiłem przygotować dzisiaj zestaw, któr...
120 tapet programistycznych za darmo do pobrania Trochę mi się nudziło, więc przygotowałem zestaw 120 tapet dla programistów. Możesz go pobrać. Tapety są w rozdzielczości 1366x768. Podzielone ...
10 fiszek do nauki programowania w Pythonie Uczysz się programowania w Pythonie? Pobierz te 10 fiszek, które ułatwią Ci zapamiętanie funkcji wbudowanych* w Pythona! Programowanie potrafi ...
Czytaj podobne  Grupy dla adminów i programistów na Facebooku wolne od hejterów
Napisano w Kolumna Tagi: , , ,

Menu