Um membro de ArrayList nulo é inicializado para o comprimento zero classe ArrayList depois que ele é desserializado

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: 815105
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Informações de versão beta
Este artigo aborda uma versão beta de um produto da Microsoft. As informações neste artigo são fornecidas como - é e estão sujeitas a alterações sem aviso prévio.

Nenhum suporte formal está disponível da Microsoft para este produto beta. Para obter informações sobre como obter suporte para uma versão beta, consulte a documentação que acompanha o arquivos do produto beta ou verifique o local da Web onde você foi baixada o lançamento.
Sintomas
Ao serializar um objeto que contém um objeto de classe ArrayList nulo como um membro público, conforme o esperado as marcas do membro da classe ArrayList não está presente no arquivo XML serializado. No entanto, após a desserialização, você pode observar que a instância da classe ArrayList não é nula. Em vez disso, o membro da classe ArrayList é inicializado para o comprimento zero classe ArrayList .
Causa
O serializador XML inicializa todos os membros campo público da classe serializada durante a desserialização. Portanto, o membro da classe ArrayList é inicializado para o comprimento zero ArrayList.
Como Contornar
Para contornar este problema, modifique ArrayList instância de classe como nulo após a desserialização. Para fazer isso, adicione a seguinte linha de código após a desserialização:

código .NET do Microsoft Visual translation from VPE for Csharp:
// Make an ArrayList instance as null after deserialization.obj.MyArrayList = null;
código do Microsoft Visual Basic .NET:
' Make an ArrayList instance as null after deserialization.obj.MyArrayList = Nothing
Situação
Esse comportamento é por design.
Mais Informações

Etapas para reproduzir o comportamento

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Em Project Types , clique em Visual translation from VPE for Csharp .NET ou Visual Basic. NET . Em modelos , clique em Aplicativo de console .
  4. Nomeie o projeto como MyConsoleApplication e, em seguida, clique em OK .
  5. Substitua o código existente com o código a seguir:

    código do Visual .NET translation from VPE for Csharp
    using System;using System.IO;using System.Collections;using System.Xml;using System.Xml.Serialization;namespace SerializationTestingApplication{   //	 The object of this class is used for serialization   public class ClsTest   {      public String Name;      public ArrayList List;   }   class Tests   {      // The Main function and the testing is done here.      static void Main(string[] args)      {         ClsTest obj = new ClsTest();         XmlSerializer mySerializer = new XmlSerializer(obj.GetType());         StringWriter strWriter = new StringWriter();         XmlTextWriter writer = new XmlTextWriter(strWriter);         writer.Formatting = Formatting.Indented;         writer.Indentation = 2;         obj.Name = "John";         // Serialization          mySerializer.Serialize(writer, obj);         Console.WriteLine(strWriter.ToString());         Console.WriteLine("\nRead back");         // Deserialization          obj = (ClsTest) mySerializer.Deserialize(new StringReader(strWriter.ToString()));         // Check the deserialized object by serializing.         mySerializer.Serialize(Console.Out, obj);         Console.WriteLine();         Console.Read();      }   }}
    código do Visual Basic .NET
    Imports SystemImports System.IOImports System.CollectionsImports System.XmlImports System.Xml.Serialization' The object of this class is used for serialization.Public Class ClsTest   Public Name As String   Public List As ArrayListEnd ClassModule Module1   ' The Main function and the testing is done here.   Sub Main()      Dim obj As New ClsTest()      Dim mySerializer As New XmlSerializer(GetType(ClsTest))      Dim strWriter As New StringWriter()      Dim writer As New XmlTextWriter(strWriter)      writer.Formatting = Formatting.Indented      writer.Indentation = 2      obj.Name = "John"      ' Serialization       mySerializer.Serialize(writer, obj)      Console.WriteLine(strWriter.ToString())      Console.WriteLine(vbCrLf & "Read back")      ' Deserialization       obj = mySerializer.Deserialize(New StringReader(strWriter.ToString()))      ' Check the deserialized object by serializing.      mySerializer.Serialize(Console.Out, obj)      Console.WriteLine()      Console.Read()   End SubEnd Module
  6. No menu Debug , clique em Iniciar . Você percebe o comportamento é descrito em "Sintomas" seção deste artigo. Na saída do console para Fazer leitura , você encontrar uma marca vazia para < lista / >.
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
314150INFO: Guia para a serialização XML no .NET Framework

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815105 - Última Revisão: 12/08/2015 02:05:38 - Revisão: 1.3

Microsoft .NET Framework 1.0, Microsoft .NET Framework 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbnamespace kbcollections kbxml kbprb KB815105 KbMtpt
Comentários