オブジェクトは、異なる(および参照されていない)アセンブリにあるクラスへの参照をどのように取得できますか?
-
06-07-2019 - |
質問
2つのプロジェクトがあります:A / B。プロジェクトAは、Bのオブジェクトにバインドされているすべてのwinform(論理アイテム)を含むプロジェクトです
Aにはタイプのオブジェクトがあります A.Form
Bにはタイプのオブジェクトがあります B.シリアライザー B.Logic
現在、AにはBへの参照がありますが(BにはAへの参照はありません)、A.FormにはB.Logic型のメンバー変数が含まれています。ある時点で、すべてのデータがB.Logicに保存されると、B.Serializer(B.Logic)を呼び出してこのオブジェクトをディスクに保存しようとします。
この時点で、A.Fromがシリアル化可能としてマークされていないことを示すシリアル化時にエラーが発生します。
しかし、プロジェクトBにはAへの参照がまったくありません。たとえA.Formを参照するメンバーがSOMEHOWに含まれていたとしても、コンパイルすることはできません。
解決
ここでの通常の犯人は、イベント( B.Logic
内)、または外部オブジェクトへの他の後方参照などです。フィールドをシリアル化しないようにマークできます:
[NonSerialized]
private SomeType foo;
またはフィールドのようなイベントの場合:
[field: NonSerialized]
public event EventHandler Bar;
余談ですが、説明では、 BinaryFormatter
を使用していると想定しています。個人的に、これについては予約があります-非常に脆い 。実装固有ではない何かを提案します。 XmlSerializer
、 protobuf-net 、 Json.NET など
所属していません StackOverflow