Serializando objetos de transferência de dados no .NET

Eu tenho um conjunto de objetos de transferência de dados (por exemplo, muitas solicitações e classes de mensagens de resposta, como MainRequest, MainResponse, ShutDownRequest, ShutDownResponse)Onde novas classes continuam chegando à medida que o projeto evolui. Essas classes devem ser (des) serializadas de e paravários formatos XML com diferentes XSDs públicos. Novos formatos XML surgem à medida que o projeto também evolui.

Minha pergunta aqui é como eu projetaria minhas classes e interfaces em torno deestes dois requisitos, especialmente onde devo colocar a lógica real de (des) serilização. Devo escrever um serviço estático que possa levar as várias instâncias de DTO e saber serializar cada uma delas? Quando novas classes chegam, preciso tocar em cada FormatXSeriaizer e adicionar novas substituições. À medida que novos formatos chegam, eu apenas tenho que escrever novas classes 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);

ou os DTOs devem saber como fazê-lo. Então, eu tenho tudo em um só lugar - para cada classe de DTO. À medida que novas classes de DTO chegam, elas apenas precisam implementar a serialização para os vários formatos. À medida que novos formatos chegam, tenho que tocar em cada classe de DTO.

myMainRequestInstace.Serialize(FormatTypeEnum type, XmlWriter writer);

Ou existe uma abordagem completamente diferente? Devo introduzir uma interface comum para serialização e ter alguma inversão de controle, para poder carregar novos serializadores de formato em tempo de execução?

Que padrão de design pode me guiar aqui?

Que código-fonte aberto no mundo .NET eu poderia estudar para ver abordagens diferentes sobre esse assunto?

Edição: Eu sei sobre as técnicas gerais de serialização existentes no quadro. Minha pergunta é mais voltada para o design de classe que respeita os dois requisitos: vários formatos xml e vários DTOs (tipos de mensagem) que continuam surgindo à medida que o projeto evolui.

questionAnswers(4)

yourAnswerToTheQuestion