Created by Thiago Russo
over 7 years ago
|
||
Question | Answer |
Qual a diferença entre serialização de XML e binária? | O XmlSerializer tem saída de texto legível. Vc pode abrir no bloco de notas para inspecionar e editá-lo. Mas a legibilidade humana do arquivo tb acrescenta ao seu tamanho. Usando um formato binário, vc terá um resultado menor. Vc tb pode serializar dados que não é adequado para um formato XML, como uma imagem. Usar serialização binária parece com o XmlSerializer. Vc precisa marcar um item com o SerializableAttribute e, em seguida, usar instância do serializador binário para serializar um objeto ou um objeto gráfico para um Stream Serialização binária cria um fluxo (stream) compacto de bytes. Uma coisa que é diferente em comparação com a serialização XML é que os campos privados são serializados por padrão. Outra coisa é que durante a desserialização, nenhum construtor é executado. Você tem que levar isso em conta quando se trabalha com a serialização binária. |
exemplo Using binary serialization | |
Binary serialization Como impedir que os campos sejam serializados? |
Image:
Non Serialized (image/png)
|
Qdo o serializador binárionão pode encontrar um campo específico | Serialização binária é mais rigorosa do que a serialização XML. Qdo o serializador XML não pode encontrar um campo específico, não irá lançar uma exceção; ela só vai definir a propriedade para o valor padrão. O serializador binário não vai te perdoar. Por isso, é importante ser capaz de influenciar o processo de serialização |
OptionalFieldAttribute | Vc pode usar o OptionalFieldAttribute para ter certeza de que o serializador binário sabe que um campo será adicionado em uma versão posterior e que objetos serializados anteriores não irá conter esse campo, por exemplo. |
Você pode influenciar o processo de serialização e desserialização em quatro fases específicas usando 4 atributos: | Você pode influenciar o processo de serialização e desserialização em quatro fases específicas, quando começar e terminar uma ação. Você pode fazer isso usando as quatro seguintes atributos: ■ OnDeserializedAttribute ■ OnDeserializingAttribute ■ OnSerializedAttribute ■ OnSerializingAttribute |
exemplo Using attributes to control serialization | |
problema ao expor dados privados Como resolver? Explicação.. | Uma coisa que é importante manter em mente é que um objeto serializado pode expor dados privados que tem segurança sensíveis. TODOS que tem permissões para desserializar o arquivo podem acessar seus dados sensíveis. Se você tem uma classe sensível, você deve implementar a interface ISerializable. Ao implementar essa interface, você tem controle sobre quais valores são serializados. Você pode optar por não serializarr dados sensíveis ou possivelmente criptografar antes de serialização. |
exemplo de Implementing ISerializable (explicação nos próximos 2 cards) | |
Como você pode ver, a implementação de ISerializable consiste de duas partes importantes. Explique a primeira: GetObjectData | GetObjectData: Este método é chamado qdo o obj é serializado. Ele deve add os valores q vc deseja serializar como pares de chave/valor para o objeto SerializationInfo que é passado para o método. Uma coisa que é importante é que você deve marcar este método com um atributo SecurityPermission (você pode encontrar este atributo no namespace System.Security.Permissions) para que ele seja autorizado a executar código de serialização e desserialização. |
Como você pode ver, a implementação de ISerializable consiste de duas partes importantes. Explique a segunda: adição de um construtor protegido especial | O outro passo importante é a adição de um construtor protegido especial que leva um SerializationInfo e StreamingContext. Esse construtor é chamado durante a desserialização, e você usá-lo para recuperar os valores e inicializar seu objeto. Como você pode ver, você está livre em escolher os nomes para os valores que você adicionar para o SerializationInfo. É importante implementar verificações de segurança em seu construtor. Dessa forma, você pode ter certeza de que ninguém tenha mexido com os dados serializados. |
Want to create your own Flashcards for free with GoConqr? Learn more.