Pergunta

Eu estou tentando descobrir a melhor maneira de serialização pega no meu programa.

Eu quero serializar campos privados (assim serializador XML é nenhuma opção) Eu quero serializar tipos genéricos como BindingList (SoapSerializer há opção) Eu também quero fornecer algum nível de suporte para ser capaz de anular a serialização objeto de versões anteriores do meu programa.

Então tudo que eu acho que eu estou com a esquerda é o BinarySerializer, e implementando a interface ISerializable para lidar com compatibilidade para a frente.

É este correto?

Nota: Devo dizer que eu encontrei este projeto. No entanto, o projeto parecia morto e eu não poderia fazê-lo funcionar (arquivo ausente erro) http://sourceforge.net/project/showfiles.php?group_id=196509

Foi útil?

Solução

Com BinaryFormatter, você pode usar [OptionalField] , mas isso ainda é muito frágil .

Como sobre protobuf-net? Será que tudo isso, e não tem os problemas de controle de versão associados BinaryFormatter. Uma vez que é baseado no formato "protocolo buffers" do Google, é concebido para ser a versão tolerante e extensível (divulgação: Eu sou o autor, então eu pode ser tendenciosa).

Como alternativa, DataContractSerializer suporta serialização campo; Basta definir [DataMember] contra seus campos em vez das propriedades (requer .NET 3.0).

Outras dicas

Sim, você precisa implementar ISerializable.

Os principais pontos são os seguintes

  • Implementar GetObjectData (SerializationInfo info, contexto StreamingContext). Aqui você precisa adicionar pares de chaves em informações objeto.
  • Implementar construtor serialização MyClass (SerializationInfo info, contexto StreamingContext). Aqui você precisa para obter os valores do objeto de informações.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top