MCTS536 - Cap. 5 - Serialization(System.RunTime.Serialization)
Autor: Manual de fotografia | Publicado: 2010-09-20T11:20:00-07:00

·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Definição: Trata-se da conversão do objeto em binário, SOAP, ou XML.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serializando:o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cria-se um streamo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Instancia-se um BinaryFormatter, parte do System.RunTime.Serialization.Formatters.Binaryo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Usa o objeto instanciado BinaryFormatter, para serializar·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deserializado:o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; É o caminho inverso da serialização·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criando uma classe serializavelo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Utilização do atributo serializableo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Por default, outros códigos&nbsp; podem acessar ou modificar instancias de objetos serializados, mas classes obtidas da internet ou de terceiros, são protegidas pela classe Security Permission·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Desabilitando a serialização de alguns membroso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A serialização de membros calculados ocupam mais espaço do que se não estivessem serializado, por isso devemos atribuir o [NonSerialized] a esse membro especificoo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Com esse atributo, os campos NonSerialized são omitidos e não calculados, logo devemos utilizar a interface IDeserializationCallBack e implementar a Sub IdeserializationCallBack_OnDeserialization para faze-lo. Desse modo o cálculo do objeto somente é feito no momento da deserialiazacao·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compatibilidade de algumas versõeso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objetos serializados devem acompanhar as versões da aplicação.o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Para evitar esse problemas precisamos ativar a serialização default on
o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptionalField: Este componete evita que os novos componentes da versão dêem erros, atribuindo para eles o valor de null
o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dicas para problemas de versão§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nunca remova um campo serializavel§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nunca atribua o NonSerializedAttribute para quem nunca teve§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nunca troque o nome de uma campo serializeble§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Se colocar o um campo novo colocar o atributo OptionalField.o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Formatos de serialização§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; binaryFormatter: Ótimo para ser usado com o Framework .NET§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPFormatter: Transforma em XML, pode ser utilizado por outras tecnologias, é melhor aceito pelos firewalls. Ë muito maior que o binárioo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Controlando uma serialização SOAP§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atributos·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPAtributte: Usado em campos públicos, propriedades, parâmetros ou valores de retorno serializando-os como XML. Trata Atributos·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPElement: Usado em campos públicos, propriedades, parâmetros ou valores de retorno, serializando-os como XML. Trata elementos.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;AtributoXElemeto: Atributo fazem parte de elementos·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPEnum: Campo Público que é parte de um Enum. Serializado com o nome de um elemento enum·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPIgnore: Usado em propriedades e campos públicos. Esses campos serão ignorados quando a classe for serializada·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOAPInclude: Usado em classes herdadas e declaração publica de webserviceso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dicas de Serialização§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Na duvida marque com serializavel, um dia pode ser necessário§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marque temporáro e membros calculados com nonserialized§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; soapFormatter: Portabilidade§&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; binaryFormatter: EficiênciaXML (System.XML.Serialization)(Serializacao) Condicoes      para uma classe serializável por XML:
Seja       pública, os métodos a serem serializados sejam publicos e seu construtor       não tenha parâmetros
Atributos
XMLAnyAttribute:       Usado em campos, propriedades, parâmetros ou valores de retorno publicos       que utilizem um array de objetos XMLAttributes. Quando deserializavel, o       array será preenchido com os XMLAtrtibutes que representarão todos os       objetos deste tipo desconhecidos ao schema
XMLAnyElement:       Igual ao dos atributos so que para elementos
XMLArray:       Usado em campos, propriedades, parâmetros ou valores de retorno publicos       que utilizem um array de objetos complexos. Os membros do array serão       gerados como       membros de um array XML.
XMLArrayItem:       Mesmo uso do XMLArray. Os tipos herdados podem ser inseridos num array
XMLAttribute:       Usado em campos públicos, propriedades, parâmetros, ou ainda valores de       retorno. Esse atributo será serializado como um atributo XML
XMLChoiceIdentifier:       Utilizados nos mesmo tipos descritos anteriormente. O membro será       utilizado em um enum.
XMLElement:       Usado em campos públicos, propriedades, parâmetros, ou ainda valores de       retorno. Esse atributo será serializado como um elemento XML
XMLEnum:       Utilizado em um campo publico que seja um enum. O nome do Enum será       deserializado.
XMLIgnore:Usado       nos mesmos tipos descritos anteriormente. Ignora esses campos
XMLRoot:       Usado no webservices. Usado para especificação de namespaces e nome do       elemento
XMLText:       Propriedades e campos públicos. Serializado com um texto XML
XMLType:       Declaracoa de classes pública. O nome e o namespace de um tipo XML
Utilizando      Padroes de XML
Já       existem padrões para download
Comando       para atualização:
Xsd        c:\Schema\library.xsd \classes \language:cd, no prompt do visual studio
Serializacao      Controlada
A       customizacao de uma serializacao implica necessariamente em implementar o       método getObjectDate, usado na serialização, e o construtor (new), usado       na desearilizacao. Esse processo e sempre utilizado com a interface       ISerializable.
Método       getObjectData: Nesse método os valores a serem serializados são incluídos       os valores a serem serializados e os nomes usados para estes variaveis       que conterão esses valores.
Estes       nomes são partes de um objeto de um objeto chamado SerializationInfo e       são preenchidos pelo método addValue
Este       objeto é recebido com parâmetro deste método addValue. 
Na       deserializacao, quando é usado o construtor, um objeto do tipo       SerializationInfo também é parâmetro e suas informações obtidas através       dos métodos Get
Eventos       da Serialização (Apenas para Serialização binaria)
Serializing:        Ativado antes da serializacao, Necessita do atributo onSerializing
Serialized:        Ativado logo Após a serialização. Necessita do atributo onSerialized
Deserializing:        Ativado antes da deserializacao. Necessita do atributo onDeserializing
Deserialized:        Ativado logo após a deserializacao e depois do        IdeserializationCallBack.OnDeserialization ser chamado este método é        chamado quando outras serializações são usadas no binaryFormatter. 
Streams        de serialização não podem ser acessados por estes eventos, mas os        objetos podem ser alterados neste momento
Para        que estes eventos realmente funcionem e necessário que exista no método        streamingContext como        parâmetro.