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?
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.
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.
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: