Copie en profondeur à l'aide de Réflexion dans une Méthode d'Extension pour Silverlight?
Donc j'essaye de trouver une extension générique méthode qui crée une copie en profondeur d'un objet à l'aide de la réflexion, qui serait à l'œuvre dans Silverlight. Copie en profondeur à l'aide de la sérialisation n'est pas si grande dans Silverlight, car il fonctionne en confiance partielle et le BinaryFormatter n'existe pas. Je sais aussi que la réflexion serait plus rapide que la sérialisation pour le clonage.
Il serait agréable d'avoir une méthode qui fonctionne pour copier public, privé et protégé des champs, et est récursive de sorte qu'il peut copier des objets en objets, et qui serait aussi capable de gérer les collections, tableaux, etc.
J'ai cherché en ligne, et que la seule copie superficielle implémentations de l'aide de la réflexion. Je ne comprends pas pourquoi, puisque vous pouvez simplement utiliser MemberwiseClone, donc, pour moi, ces implémentations sont inutiles.
Merci.
OriginalL'auteur Didier A. | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
Pour les données des objets du contrat, nous avons utilisé la méthode d'assistance pour la profondeur de clonage dans Silverlight:
Utilisée comme ceci:
Probablement pas. msdn.microsoft.com/en-us/library/ms731923(v=vs. 110).aspx
Je pensais alors, merci pour le lien
Petite question, comment cette poignée de tableaux et de Listes? Est-il copier la référence du tableau/liste? Ou faut-il reconstruire le tableau/liste en vertu d'une nouvelle référence? En d'autres termes, si la classe A avec Liste est copié à B, sera l'édition B également modifier la liste d'Un?
OriginalL'auteur Myles J
Espaces De Noms Requis:
Méthode:
Ce n'est pas spécifique à Silverlight en aucune façon - il est tout simplement la Réflexion.
Comme l'a écrit il ne fonctionne qu'avec les objets qui ont un constructeur sans paramètre. Pour utiliser les objets qui nécessitent des paramètres du constructeur, vous aurez besoin de passer dans un objet[] avec les paramètres, et d'utiliser une autre surcharge de l'Activateur.Méthode CreateInstance par exemple
La propertyExcludeList paramètre est une liste de noms de propriété que vous souhaitez exclure de la copie, si vous souhaitez copier toutes les propriétés, il suffit de passer une liste vide par exemple
System.ArgumentException was unhandled by user code Message=Property set method not found.
C'est une copie. Il aurait besoin d'être récursive et de vérifier si une propriété est une collection d'une copie en profondeur.
OriginalL'auteur Kevin
Ne pouvez-vous pas juste une utilisation régulière .NET réflexion? Sérialiser l'objet pour un
MemoryStream
et puis désérialiser le dos. Cela va créer une copie en profondeur (en fin de compte à l'aide de la réflexion), et nécessitera à peine n'importe quel code sur votre partie:Cela ne fonctionne pas pour les contrôles de l'utilisateur, comme la non-objets sérialisables!
OriginalL'auteur Sean