J'ai implémenté une méthode de copie en profondeur lorsque vous montez dans cette méthode - la classe est copiée comme prévu. Toutefois, si j'interviens sur la méthode et inspecte l'instance de classe, certaines propriétés ne sont pas copiées correctement.La copie en profondeur ne fonctionne correctement que lorsque vous entrez dans la méthode
Profile profile = new Profile();
profile = Model.Copy<Profile>(Profile.GetProfileById(ProfileID));
profile.Save();
Le code ci-dessus montre où l'instance de classe est créée et la copie est appelée.
Conformément à la base de données, le profil que je souhaite copier a deux éléments dans la propriété AddressCollection
.
Si je place un point d'arrêt sur la ligne profile.Save()
et que vous passez la méthode de copie, l'instance n'est pas copiée correctement et la propriété AddressCollection
comporte 0 élément.
Toutefois, si je suis réellement dans la méthode de copie, l'instance est copiée correctement et renvoie le AddressCollection
avec 2 éléments.
Copie Méthode
public T Copy<T>(T oldObject) where T : CRMBusinessObjectBase
{
return Copy<T>(oldObject, null, null);
}
public T Copy<T>(T oldObject, CRMBusinessObjectBase parentObject, string parentProperty) where T : CRMBusinessObjectBase
{
//Create copy of business object
T copy = null;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter sz = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//Serialize and then deserialize to a new object
using (MemoryStream ms = new MemoryStream())
{
sz.Serialize(ms, oldObject);
ms.Position = 0;
copy = (T)sz.Deserialize(ms);
}
//Set business object as new
copy.SetAsNew();
//Set parent property if specified
if (parentObject != null && !string.IsNullOrEmpty(parentProperty))
{
copy.GetType().GetProperty(parentProperty).SetValue(copy, parentObject, null);
}
return copy;
}
J'ai essayé de changer le BinaryFormatter
d'utiliser un DataContractSerializer
sans chance. J'ai également essayé d'utiliser la réflexion au lieu de la sérialisation et le même problème se produit.
Je ne sais pas trop où le problème pourrait être.
Captures d'écran
Avant la copie Une fois la copie
Les propriétés ne sont peut-être pas attribuées comme 'Serializable'? –
La classe est 'sérialisable', cela ne peut pas être appliqué aux propriétés – DNKROZ
Vous avez raison. Pardon. Mais vous pourriez avoir des attributs de types qui ne sont pas sérialisables ou spécifiquement marqués comme des attributs non sérialisables. Mais je pense que vous auriez déjà vérifié que –