Deep Eine .NET Class-Instanz ohne Serialisierung kopieren

8

Ich verwende eine Instanzklasse aus einer DLL eines Drittanbieters, und ich muss eine tiefe Kopie für eine bestimmte Instanz erstellen. Die Klasse ist nicht als Serializable markiert, und daher kann ich Diese vorgeschlagene Methode verwendet BinaryFormatter .

Wie kann ich eine tiefe Kopie dieses Objekts ohne Serialisierung erhalten?

    
Josh Stodola 28.01.2010, 19:54
quelle

3 Antworten

5

Ich habe Copyable mit großem Erfolg verwendet. Es verwendet Reflexion unter der Haube. Es ist Open-Source. Lesen Sie Einschränkungen und Fallstricke , um zu sehen, ob Sie es verwenden können.

    
Kenny Eliasson 28.01.2010, 19:59
quelle
1

Sie können nicht (oder sollten Sie nicht, was ich suche).

Wenn die Klasse nicht für die Serialisierung konzipiert ist und Ihnen keine Möglichkeit bietet, sie zu klonen (z. B. in Form einer Klon- oder Kopiermethode), können Sie dies nicht einfach automatisch tun. (Und zusätzlich, wenn diese Einrichtung nicht zur Verfügung gestellt wird, sollten Sie dies wahrscheinlich nicht tun, da die Klasse wahrscheinlich nicht für diese Art der Verwendung konzipiert ist.)

Wenn Sie dies jedoch wirklich tun möchten und in einer Umgebung mit vollständiger Vertrauenswürdigkeit sind, können Sie natürlich mit FormatterServices.GetUninitializedObject etwas Schmutziges anstellen und dann mit Hilfe der Reflektion die Feldwerte von einem Objekt zum anderen kopieren . Aber das ist mit ziemlicher Sicherheit eine schlechte Idee.

    
Greg Beech 28.01.2010 19:57
quelle
1

Ein Vorschlag besteht darin, die Json-Serialisierung (die Reflexion verwendet und nicht auf das [Serializable] -Attribut angewiesen ist) zu serialisieren und in eine Kopie zu deserialisieren. Verwenden Sie beispielsweise die Json.Net-Bibliothek:

%Vor%     
Abhishek Ranjan 24.08.2017 11:56
quelle

Tags und Links