Design ohne Standardkonstruktor

7

Ich möchte das Erstellen von Objekten mit dem Standardkonstruktor einschränken. Weil ich ein Design wie unten habe:

%Vor%

Das ist in Ordnung. Aber wenn ich BaseClass zu Serializable mache, wird dieser Fehler erzeugt: Unhandled Exception: System.InvalidOperationException: ConsoleApplication1.BaseC lass cannot be serialized because it does not have a parameterless constructor.

Jetzt ist mein Design kollabiert, weil ich Username , Password -Parameter haben muss, aber der Standardkonstruktor ruiniert mein Design ....

Was soll ich tun?

    
uzay95 10.04.2012, 11:55
quelle

3 Antworten

12

Erstellen Sie einen privaten Standardkonstruktor

%Vor%

Der Serializer ruft dies erfolgreich auf, obwohl es privat ist

    
Robbie 10.04.2012, 11:58
quelle
11

Die Deserialisierung Ihrer Instanzen erfordert einen parameterlosen Konstruktor, um die Instanz zu erstellen, aber Sie müssen keinen öffentlichen Konstruktor implementieren. Es reicht, einen private oder internal -Konstruktor zu haben, solange er keine Parameter benötigt .

Übrigens können Sie auch den DataContractSerializer verwenden , die keinen parameterlosen Konstruktor benötigt und auch XML erzeugt; es ist immer meine erste Wahl: -)

    
Matten 10.04.2012 11:58
quelle
1
  • Haben Sie versucht, einen privaten parameterlosen Konstruktor zu erstellen?

  • Wenn es ein öffentliches Bedürfnis gibt, können Sie immer sagen, dass es nicht verwendet werden sollte (nicht die beste Lösung)

Sie müssen auch Eigenschaften in Ihrer Serializable-Klasse erstellen. Variablen werden nicht berücksichtigt und während des Serialisierungs- / Deseralisierungsprozesses nicht gelesen oder geschrieben.

    
Luis Filipe 10.04.2012 12:02
quelle

Tags und Links