Erro: Exceção de "System.Runtime.Serialization.SerializationException" Se você declarar uma variável local estática em um método de uma classe Visual Basic .NET ou Visual Basic 2005 e tenta serializar o objeto da classe usando BinaryFormatter ou SoapFormatte

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 818412
Sintomas
Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 permite que você declarar variáveis locais estáticas dentro de um método da classe. No entanto, se você declarar uma variável local estática em um método da classe Visual Basic .NET ou Visual Basic 2005 e, em seguida, tentar serializar o objeto da classe usando BinaryFormatter ou SoapFormatter , você receberá a seguinte exceção durante o tempo de execução:
Uma exceção sem tratamento do tipo 'System.Runtime.Serialization.SerializationException' ocorreu no mscorlib.dll
Obter informações adicionais: O tipo Microsoft.VisualBasic.CompilerServices.StaticLocalInitFlag no Assembly Microsoft.VisualBasic, versão = 7.0.3300.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a não está marcado como serializado.
Causa
O common language runtime não dá suporte variáveis estáticas nos métodos. Quando o compilador do Visual Basic .NET ou Visual Basic 2005 compila seu código, ele converte este alto nível Visual Basic .NET ou Visual Basic 2005 código com Microsoft intermediate language (MSIL) que o common language runtime pode entender para lhe compartilhado funcionalidade variável. Visual Basic .NET ou Visual Basic 2005 usa a classe Microsoft.VisualBasic.CompilerServices.StaticLocalInitFlag para fornecer essa funcionalidade. No Visual Basic .NET ou no compilador do Visual Basic 2005, StaticLocalInitFlag não está marcado como serializado. Portanto, você recebe a exceção durante o tempo de execução.
Resolução
Você não pode resolver esse bug usando BinaryFormatter ou SoapFormatter . Para resolver esse erro, use o XmlSerializer em vez de usar BinaryFormatter ou SoapFormatter para serializar o objeto. No entanto, você não pode encontrar uma entrada para a variável local estática no arquivo XML gerado. O código a seguir descreve o uso de XmlSerializer para serializar o objeto:
Imports System.IOImports System.Xml.SerializationModule Module1   Sub Main()      Dim myObj As New MyTestClass()      Dim myStream As Stream      Dim mySerializer As New XmlSerializer(GetType(MyTestClass))      Try         myStream = File.Open("C:\obj.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite)         mySerializer.Serialize(myStream, myObj)      Finally         myStream.Close()      End Try   End SubEnd ModulePublic Class MyTestClass   Public Sub New()   End Sub   Public Sub myTestMethod()      Static myStaticVar As Integer = 1   End SubEnd Class
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.
Mais Informações

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Em Project Types , clique para selecionar Projetos do Visual Basic .NET .

    Observação No Visual Studio 2005, clique em Visual Basic em Project Types .
  4. Em modelos , clique em para selecionar o Aplicativo de console .
  5. Nomeie o projeto MyConsoleApplication e em seguida, clique em OK .
  6. Substitua o código existente com o código a seguir:
    Imports System.IOImports System.Runtime.Serialization.Formatters.BinaryModule Module1   Sub Main()      Dim myObj As New MyTestClass()      Dim myStream As Stream      Dim formatter As New BinaryFormatter()      Try         myStream = File.Open("C:\obj.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite)         formatter.Serialize(myStream, myObj)      Finally         myStream.Close()      End Try   End SubEnd ModulePublic Class MyTestClass   Public Sub New()   End Sub   Public Sub myTestMethod()      Static myStaticVar As Integer = 1   End SubEnd Class
  7. No menu Debug , clique em Iniciar .

    Você recebe a exceção mencionada na seção "Sintomas" deste artigo.
Referências
Para obter mais informações sobre a serialização de XML, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
323503WebCast: Serialização de XML e código de exemplo
314150INFO: Guia para a serialização XML no .NET Framework

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 818412 - Última Revisão: 12/06/2006 23:18:59 - Revisão: 2.3

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbvs2002sp1sweep kberrmsg kbxml kbserial kbbug KB818412 KbMtpt
Comentários