Messaggio di errore quando si serializza una classe utilizzando la classe XMLSerializer: "System. InvalidOperationException"

Informazioni di supporto interno Microsoft

BUG #: 2565 (RunTime di applicazioni Server/universale:)

In questo articolo si riferisce al seguente spazio dei nomi Microsoft.NET Framework Class Library:System.Xml.Serialization

Sintomi

Quando si tenta di utilizzare la classe XmlSerializer per serializzare una classe che non dispone di un costruttore pubblico predefinito, è che venga visualizzato il seguente messaggio di errore di eccezione InvalidOperationException:

Si è verificata un'eccezione non gestita di tipo 'System. InvalidOperationException' in system.xml.dll informazioni aggiuntive: si è verificato un errore nella riflessione di 'classe'.

in classe indica la classe che ha tentato la classe XmlSerializer per serializzare.

Causa

Poiché il costruttore predefinito non è definito per la classe che ha tentato di XmlSerializer per serializzare, viene generato l'eccezione InvalidOperationException.

Risoluzione

Per risolvere il problema, definire un costruttore senza parametri. Aggiungere un costruttore predefinito pubblico alla classe che si desidera serializzare. Nell'esempio di codice seguito viene un costruttore senza parametri per una classe (in questo samplem, la classe è denominata SerializerTest):

[Serializable]public class SerializerTest{public SerializerTest(string data){this.data = data;}public string data;//Add a parameterless constructor.public SerializerTest() {}}

Stato

Si tratta di un comportamento correlato alla progettazione del prodotto.

Ulteriori informazioni

Il messaggio di errore System. InvalidOperationException viene utilizzato per indicare che non è stato richiamato un metodo per motivi diversi da argomenti non validi. L'errore System. InvalidOperationException per la classe XmlSerializer metodo Serialize si verifica quando si tenta di serializzare una classe che non dispone di un costruttore predefinito o un modificatore public . Quando la classe viene deserializzata con il metodo XmlSerializer.Deserialize , viene creata un'istanza della classe. Il costruttore predefinito fornito dalla classe viene richiamato dal metodo Deserialize per creare l'istanza. Anche se sono definiti costruttori aggiuntivi per la classe, viene richiamato solo il costruttore predefinito.

Procedura per riprodurre il problema

  1. Avviare Microsoft Visual Studio .NET o Microsoft Visual Studio 2005

  2. Fare clic su Progetti di Visual C# in Tipi progettoe quindi fare clic su Applicazione Console in modelli. Nota: In Visual Studio 2005, fare clic su Visual C# in Tipi progetto.

  3. Nell'oggetto predefinito generato Class1. cs, sostituire il codice esistente con il codice seguente:

    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();}}}

    Nota: In Visual Studio 2005, sostituire il codice esistente nel file Program.cs.

  4. Compilare ed eseguire il codice.

Viene visualizzato il messaggio di errore menzionato nella sezione "Sintomi" di questo articolo.

Riferimenti

Per ulteriori informazioni sulla serializzazione, visitare i seguenti siti Web Microsoft Developer Network (MSDN):

La serializzazione in fase di esecuzione

La serializzazione binaria

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×