Pergunta

Eu estou usando a Serialização Binária em .NET para clonar objetos.Qualquer uma das minhas aulas eu deve marcar com o <Serializable()> atributo para o serializador para processar a classe.No entanto, uma vez que esta é uma função que vai ser usado em qualquer objeto, eu estava me perguntando:

É possível ter o serializador serializar o objeto mesmo se ele não estiver marcado com o <Serializable()> atributo?Se não, há uma forma de "auto-aplicáveis" o atributo de alguma classe?

Editar.A minha principal preocupação é que eu preciso ser capaz de clonar POCO objetos que já existem no .NET Framework.São todos aqueles que já serializable bem?

Foi útil?

Solução

Sem saber como, uma classe é implementada, é que não é seguro serializá-lo, e isso poderia levar sutilmente-objetos quebrados.É por isso que um designer de classe deve, intencionalmente, adicionar o Serializable atributo, deixando que o tempo de execução sei que esta é uma operação segura.Automaticamente a adição de um atributo para qualquer classe é provavelmente uma má idéia.

Se você realmente precisa serializar uma classe que não é Serializable, você pode fazê-lo manualmente:

  1. Descobrir uma maneira de converter o problema de classe para e a partir de uma representação alternativa.
  2. O uso que outra classe para a serialização, a conversão de e para trás, conforme necessário.

Em caso de falha, você deve olhar para outras formas de preservação do estado, além de serialização.

Outras dicas

Você não pode modificar atributos em tempo de execução.Apenas na origem.

Você pode usar a reflexão para iterar sobre as propriedades de qualquer classe/instância.Mas você tem que fazer um serializador personalizado.

A .NET framework em si, normalmente, fornece suporte a serialização em todas as classes e structs onde isso faz sentido, por isso é provável que as classes do framework em si vai funcionar bem com o seu clonagem.No entanto, você pode ter problemas se você usar qualquer um 3º-festa de bibliotecas, que, infelizmente, muitas vezes não tem adequado suporte a serialização.

Considere o uso de typeof(yourType).IsSerializable...

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