Deserialize to self

8

Ok, ich habe hier wahrscheinlich nur ein episches Scheitern, aber mein Verstand möchte sagen, dass das funktionieren sollte.

Angenommen, DataProtect.DecryptData verwendet eine verschlüsselte Zeichenfolge als Eingabe und eine entschlüsselte Zeichenfolge als Ausgabe. Nehmen wir an, deserializeXML erstellt das entsprechende Objekt und gibt es aus der neu entschlüsselten Zeichenfolge zurück.

Also. Warum sollte das nicht funktionieren?

%Vor%

Gibt mir einen Fehler von

%Vor%

Genauer gesagt, wie kann ich das zum Laufen bringen? Ich möchte im Wesentlichen eine serialisierte XML-Version des Objekts entschlüsseln und dann im Konstruktor deserialisieren.

Ich bin offen für "Sie können nicht" (mit einer Erklärung), wie ich es anderswo ausdrücken kann und nur Werte zuweisen, aber mein Verstand sagt, dass so etwas möglich sein sollte.

    
dotalchemy 22.03.2011, 22:59
quelle

4 Antworten

12

Nein, dies ist mit einem Konstruktor nicht möglich, Sie können this nicht neu zuweisen.

Verwenden Sie stattdessen eine statische Methode:

%Vor%

Rufen Sie es an:

%Vor%     
Femaref 22.03.2011, 23:02
quelle
3

Sie können "this" nichts zuweisen. Ändern Sie ArriveDetails in eine statische Datei, die das deserialisierte Objekt zurückgibt.

%Vor%     
Richard Schneider 22.03.2011 23:04
quelle
3
___ answer20915536 ​​___

Sie können dies mit Reflektion wie folgt archivieren:

%Vor%

Dies weist das deserialisierte Objekt einer temporären Variablen zu und kopiert den Wert in jeder öffentlichen Eigenschaft in this mit Reflection. Dieser Ausschnitt vermeidet das Kopieren von Eigenschaften mit dem XmlIgnore-Attribut.

    
___ qstnhdr ___ Deserialize to self ___ answer5398928 ___

Nein, dies ist mit einem Konstruktor nicht möglich, Sie können %code% nicht neu zuweisen.

Verwenden Sie stattdessen eine statische Methode:

%Vor%

Rufen Sie es an:

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer5398941 ___

Was Sie möchten, ist eine statische Factory-Methode, die das gewünschte Objekt erstellt.

%Vor%

Der Grund dafür, dass Ihr ursprünglicher Ansatz nicht funktioniert hat, ist, dass %code% ein privates schreibgeschütztes Instanzfeld ist, das das Objekt zurückgibt, von dem es aufgerufen wurde. Sie können nicht in %code% schreiben.

    
___ tag123serialization ___ Serialisierung ist der Prozess, mit dem Datenstrukturen in ein Format konvertiert werden, das leicht gespeichert oder übertragen und anschließend rekonstruiert werden kann. ___ tag123object ___ Ein Objekt ist eine Entität, die durch Befehle in einer Programmiersprache manipuliert werden kann. Ein Objekt kann ein Wert, eine Variable, eine Funktion oder eine komplexe Datenstruktur sein. In der objektorientierten Programmierung bezieht sich ein Objekt auf eine Instanz einer Klasse. ___ qstntxt ___

Ok, ich habe hier wahrscheinlich nur ein episches Scheitern, aber mein Verstand möchte sagen, dass das funktionieren sollte.

Angenommen, DataProtect.DecryptData verwendet eine verschlüsselte Zeichenfolge als Eingabe und eine entschlüsselte Zeichenfolge als Ausgabe. Nehmen wir an, deserializeXML erstellt das entsprechende Objekt und gibt es aus der neu entschlüsselten Zeichenfolge zurück.

Also. Warum sollte das nicht funktionieren?

%Vor%

Gibt mir einen Fehler von

%Vor%

Genauer gesagt, wie kann ich das zum Laufen bringen? Ich möchte im Wesentlichen eine serialisierte XML-Version des Objekts entschlüsseln und dann im Konstruktor deserialisieren.

Ich bin offen für "Sie können nicht" (mit einer Erklärung), wie ich es anderswo ausdrücken kann und nur Werte zuweisen, aber mein Verstand sagt, dass so etwas möglich sein sollte.

    
___ answer5398949 ___

Sie können "this" nichts zuweisen. Ändern Sie ArriveDetails in eine statische Datei, die das deserialisierte Objekt zurückgibt.

%Vor%     
___
fujieda 04.01.2014 01:07
quelle
2

Was Sie möchten, ist eine statische Factory-Methode, die das gewünschte Objekt erstellt.

%Vor%

Der Grund dafür, dass Ihr ursprünglicher Ansatz nicht funktioniert hat, ist, dass this ein privates schreibgeschütztes Instanzfeld ist, das das Objekt zurückgibt, von dem es aufgerufen wurde. Sie können nicht in this schreiben.

    
Martin Doms 22.03.2011 23:03
quelle

Tags und Links