J'ai une question sur la sérialisation binaire en C#Exclure objet parent sur sérialisation binaire en C#
Je dois être en mesure d'objets clone profond de la classe B (ainsi que toutes ses sous-objets dans le graphique bien sûr). Je voudrais implémenter cela en utilisant la sérialisation binaire. La discussion si c'est la meilleure méthode n'est pas pertinente dans le contexte de cette question.
Dire que j'ai cette structure de classe:
public class A
{
private B objB;
}
[Serializable]
public class B : ICloneable
{
private C objC1;
private C objC2;
public object Clone()
{
B clone = Helper.Clone<B>(this);
return (B)clone;
}
}
[Serializable]
public class C
{
int a;
int b;
}
La classe d'aide pour le clonage profond avec sérialisation binaire (j'ai reçu ce code de la méthode de quelque part sur le net, ne me souviens pas vraiment où TBH, mais il semble bien)
public static class Helper
{
public static T Clone<T>(T OriginalObject)
{
using (Stream objectStream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, OriginalObject);
objectStream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(objectStream);
}
}
}
donc, à un moment donné dans mon application, je frappe le code suivant:
B clone = (B)objA.objB.Clone();
Le problème est que le débogueur gémit à propos du fait que la classe A n'est pas marquée comme sérialisable.
Mais je ne veux pas sérialiser A, je veux sérialisation B et il est subobject C.
Je suppose qu'il essaie de sérialiser l'objet parent trop, parce que tout est interconnecté dans le graphe d'objet. Mais y a-t-il un moyen de l'exclure de la sérialisation à ce stade?
je double vérifié, il n'y a pas de référence soit de B à A ou de C à A ... La seule chose qui existe, c'est que B contient un champ d'événement public, auquel un gestionnaire d'événements de A est attentif, cela peut-il être la cause? – tjeuten
@tjeuten, oui c'est le cas, l'événement est essayer de sérialiser la liste d'invocation. s'il vous plaît regarder ma réponse éditée –
thx un zillion qui a fait le tour! – tjeuten