Comment un objet peut-il obtenir une référence à une classe qui se trouve dans un assemblage différent (et non référencé)?
-
06-07-2019 - |
Question
J'ai deux projets: A / B. Le projet A est le projet qui contient tous les winforms liés aux objets dans B (éléments logiques)
A a un objet de type A.Form
B a des objets de type B.Sérialiseur B.Logic
Maintenant, A a une référence à B (mais B n'a pas de référence à A) et A.Form contient une variable membre de type B.Logic. À un moment donné, lorsque toutes les données sont stockées dans B.Logic, j’essaie de sauvegarder cet objet sur le disque en appelant B.Serializer (B.Logic).
À ce stade, une erreur s'est produite lors de la sérialisation indiquant que A.From n'est pas marqué comme sérialisable.
Mais le projet B n'a AUCUNE référence à A du tout et même s'il a eu un membre référant à A.Form, il ne devrait même pas compiler.
La solution
Les coupables habituels sont des événements tels que des événements (dans B.Logic
) ou d'autres références en arrière à des objets externes. Vous pouvez marquer les champs comme non pour la sérialisation:
[NonSerialized]
private SomeType foo;
ou avec des événements de type champ:
[field: NonSerialized]
public event EventHandler Bar;
En dehors de la description, je suppose que vous utilisez BinaryFormatter
; Personnellement, j'ai des réserves à ce sujet. Il s'agit de très fragile . . Je suggérerais quelque chose de non spécifique à la mise en œuvre; XmlSerializer
, protobuf-net , Json.NET , etc.,