Szeregowanie obiektów transferu danych w .NET
Mam zestaw obiektów do przesyłania danych (np. Wiele wymagających klas odpowiedzi, takich jak MainRequest, MainResponse, ShutDownRequest, ShutDownResponse)Gdzie przychodzą nowe klasy w miarę rozwoju projektu. Te klasy muszą być (de) serializowane zi doróżne formaty XML z różnymi publicznymi XSD. Wraz z rozwojem projektu pojawiają się nowe formaty XML.
Moje pytanie tutaj brzmi: jak zaprojektowałbym moje klasy i interfejsy dookołate dwa wymagania, szczególnie tam, gdzie powinienem umieścić rzeczywistą logikę (de) serilizacji. Czy powinienem napisać usługę statyczną, która może zająć różne instancje DTO i wiedzieć, jak serializować każdy z nich? Kiedy przychodzą nowe klasy, muszę dotknąć każdego FormatXSeriaizer i dodać nowe przesłonięcia. Wraz z pojawieniem się nowych formatów muszę po prostu napisać nowe klasy FormatXSerializer.
FormatASerializer.Serialize(XmlWriter writer, MainResponse r);
FormatASerializer.Serialize(XmlWriter writer, ShutDownResponse r);
FormatBSerializer.Serialize(XmlWriter writer, MainResponse r);
FormatBSerializer.Serialize(XmlWriter writer, ShutDownResponse r);
lub czy DTO powinni wiedzieć, jak to zrobić. Więc mam to wszystko w jednym miejscu - dla każdej klasy DTO. Wraz z pojawieniem się nowych klas DTO, muszą one tylko wdrożyć serializację dla różnych formatów. Wraz z pojawieniem się nowych formatów muszę dotknąć każdej klasy DTO.
myMainRequestInstace.Serialize(FormatTypeEnum type, XmlWriter writer);
Czy istnieje inne podejście? Czy powinienem wprowadzić wspólny obszar do serializacji i mieć pewne odwrócenie kontroli, aby móc ładować nowe serializery formatu w czasie wykonywania?
Jaki wzór może mnie tu poprowadzić?
Jaki otwarty kod źródłowy w świecie .NET mógłbym studiować, aby zobaczyć różne podejścia do tego tematu?
EDYCJA: Wiem o ogólnych technikach serializacji istniejących w ramach. Moje pytanie jest bardziej ukierunkowane na projektowanie klas, które respektuje dwa wymagania: wiele formatów xml i wiele DTO (typy wiadomości), które przychodzą wraz z rozwojem projektu.