Pergunta

Existem quaisquer projetos de código fechado ou aberto para um serializador XML para C # que pode serializar para a maior parte qualquer objeto, sem a necessidade de poluir meus objetos de domínio com toneladas de atributos? Isso também irá lidar com a serialização de coleções construídas com as classes genéricos internos? Um bônus seria que ele pode lidar com a serialização de uma propriedade tipo de interface. Outro bônus seria que pode serializar objetos que têm propriedades somente leitura (ou pelo menos com o get acessador marcado interno)

Foi útil?

Solução

Bem, primeiro definir "avançado", ou seja, o especificamente que você precisa que XmlSerializer não tem. Em termos de POCO, XmlSerializer tem um ctor sobrecarregado que aceita todos os atributos que você poderia nunca quiser adicionar, para evitar ter que adicioná-los ao seu modelo de objeto - mas ainda exigem um construtor sem parâmetros público, e só funciona em público de leitura / gravação campos / propriedades. E você deve cache / re-utilizar o serializador se você usar essa abordagem.

Eu não estou ciente de qualquer como alternativas, simplesmente porque na maioria dos casos isso é "bom o suficiente" - e muitas vezes é um erro tentar brute-force o seu objeto de domínio existente em um DTO. Pode ser mais simples e mais fácil de manter do que simplesmente mapear suas entidades de domínio para um novo DTO (s) que são atribuído (e ter apropriado ctor / Propriedades / etc).

Note que para o DataContractSerializer ctor / propriedades questão tem alguns respostas, mas isso não tem tanto controle de grão fino sobre o que os XML é semelhante.

Outras dicas

  • Você pode permitir que System.Xml.dll para acessar seus internos usando a InternalsVisibleToAttribute. Assim, a serialização tipos internos e / ou os membros internos. Incluindo .ctors internos.
  • Você também pode implementar IXmlSerializable em aulas personalizar sua serialização (como as referências de interface recipiente contendo).
  • Você não tem que fornecer os atributos de serialização XML em suas aulas, mas proporcionar-lhes como XmlAttributeOverrides vez.

XmlSerializer é quase sempre exatamente o que as pessoas querem, eles simplesmente não sabem que é tão flexível como ele realmente é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top