Você está offline; aguardando reconexão

Mensagem de erro ao serializar uma classe usando a classe XMLSerializer: "System.InvalidOperationException"

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: 330592
Este artigo se refere ao seguinte Microsoft .NET Framework Class Library namespace:
System.XML.Serialization
Sintomas
Ao tentar usar a classe XmlSerializer para serializar uma classe que não tem um construtor público padrão, você pode receber System.InvalidOperationException seguinte mensagem de erro de exceção:
Uma exceção sem tratamento do tipo 'System.InvalidOperationException' ocorreu na system.xml.dll informações adicionais: Houve um erro ao refletir ' class '.
onde class indica a classe que a classe XmlSerializer tentou serializar.
Causa
A exceção System.InvalidOperationException é gerada porque o construtor padrão não está definido para a classe XmlSerializer tentou serializar.
Resolução
Para resolver esse problema, defina um construtor sem parâmetros.

Adicione um construtor público padrão para a classe que deseja serializar. O seguinte código demonstates um construtor sem parâmetros para uma classe (in este samplem, a classe é chamada SerializerTest ):
[Serializable]public class SerializerTest{	public SerializerTest(string data)	{			this.data = data;	}		public string data;	//Add a parameterless constructor.	public SerializerTest() {}}
Situação
Esse comportamento é por design.
Mais Informações
A mensagem de erro System.InvalidOperationException é usada para indicar que um método não foi invocado por razões diferentes de argumentos inválidos. O erro System.InvalidOperationException para a classe XmlSerializer método Serialize é causado quando você tentar serializar uma classe que não tem um construtor padrão ou um modificador pública .

Uma instância da classe é criada quando a classe é desserializada com o método XmlSerializer.Deserialize . O construtor padrão que é fornecido pela classe é invocado pelo método Deserialize para criar a instância. Mesmo se adicionais construtores são definidos para a classe, somente o construtor padrão é chamado.

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  2. Clique em projetos do Visual translation from VPE for Csharp em Tipos de projeto e, em seguida, clique em Aplicativo de console em modelos .

    Observação No Visual Studio 2005, clique em translation from VPE for Csharp Visual em Tipos de projeto .
  3. No gerado padrão Class1.cs, substitua o código existente com o código a seguir:
    using System;using System.Xml;using System.Xml.Serialization;using System.Runtime.Serialization;using System.IO; namespace ConsoleTester{	[Serializable]	public class SerializerTest	{		public SerializerTest(string data)		{			this.data = data;		}		public string data;	}	class ConsoleMain	{		[STAThread]		static void Main(string[] args)		{			SerializerTest testInstance = new SerializerTest("Hello World!");			XmlSerializer ser = new XmlSerializer(typeof(SerializerTest));			TextWriter writer = new StreamWriter("C:\\test.xml");			ser.Serialize(writer, testInstance);			writer.Close();		}	}}						
    Observação Visual Studio 2005, substitua o código existente no arquivo Program.cs.
  4. Compilar e, em seguida, execute o código.
Você receber a mensagem de erro mencionada na seção "Sintomas" deste artigo.
Referências
Para obter mais informações sobre a serialização, visite os seguintes sites da Microsoft Developer Network (MSDN):

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 330592 - Última Revisão: 12/11/2006 21:03:53 - Revisão: 3.5

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

  • kbmt kberrmsg kbprb KB330592 KbMtpt
Comentários
= guid; m.name = "ms.dqid"; document.getElementsByTagName("head")[0].appendChild(m);