segunda-feira, 20 de setembro de 2010

MCTS536 - Cap. 5 - Serialization(System.RunTime.Serialization)

·        Definição: Trata-se da conversão do objeto em binário, SOAP, ou XML.
·        Serializando:
o       Cria-se um stream
o       Instancia-se um BinaryFormatter, parte do System.RunTime.Serialization.Formatters.Binary
o       Usa o objeto instanciado BinaryFormatter, para serializar
·        Deserializado:
o       É o caminho inverso da serialização
·        Criando uma classe serializavel
o       Utilização do atributo serializable
o       Por default, outros códigos  podem acessar ou modificar instancias de objetos serializados, mas classes obtidas da internet ou de terceiros, são protegidas pela classe Security Permission
·        Desabilitando a serialização de alguns membros
o       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 especifico
o       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
·        Compatibilidade de algumas versões
o       Objetos serializados devem acompanhar as versões da aplicação.
o       Para evitar esse problemas precisamos ativar a serialização default on

o       OptionalField: Este componete evita que os novos componentes da versão dêem erros, atribuindo para eles o valor de null

o       Dicas para problemas de versão
§         Nunca remova um campo serializavel
§         Nunca atribua o NonSerializedAttribute para quem nunca teve
§         Nunca troque o nome de uma campo serializeble
§         Se colocar o um campo novo colocar o atributo OptionalField.
o       Formatos de serialização
§         binaryFormatter: Ótimo para ser usado com o Framework .NET
§         SOAPFormatter: Transforma em XML, pode ser utilizado por outras tecnologias, é melhor aceito pelos firewalls. Ë muito maior que o binário
o       Controlando uma serialização SOAP
§         Atributos
·        SOAPAtributte: Usado em campos públicos, propriedades, parâmetros ou valores de retorno serializando-os como XML. Trata Atributos
·        SOAPElement: Usado em campos públicos, propriedades, parâmetros ou valores de retorno, serializando-os como XML. Trata elementos.
·         AtributoXElemeto: Atributo fazem parte de elementos
·        SOAPEnum: Campo Público que é parte de um Enum. Serializado com o nome de um elemento enum
·        SOAPIgnore: Usado em propriedades e campos públicos. Esses campos serão ignorados quando a classe for serializada
·        SOAPInclude: Usado em classes herdadas e declaração publica de webservices
o       Dicas de Serialização
§         Na duvida marque com serializavel, um dia pode ser necessário
§         Marque temporáro e membros calculados com nonserialized
§         soapFormatter: Portabilidade
§         binaryFormatter: Eficiência
XML (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.

Nenhum comentário:

Postar um comentário