Как объект может получить ссылку на класс, который находится в другой (и не связанной) сборке?
-
06-07-2019 - |
Вопрос
У меня есть два проекта: A / B. Проект A - это проект, который содержит все формы win, которые связаны с объектами в B (логические элементы)
A имеет объект типа A.Form
B имеет объекты типа B.Serializer B.Logic
Теперь A имеет ссылку на B (но B не имеет ссылки на A), а A.Form содержит переменную-член типа B.Logic. В какой-то момент, когда все данные хранятся в B.Logic, я пытаюсь сохранить этот объект на диск, вызвав B.Serializer (B.Logic).
В этот момент я получаю сообщение об ошибке при сериализации, в котором говорится, что A.From не помечен как сериализуемый.
Но проект B вообще не имеет ссылки на A, и даже если в SOMEHOW есть член, ссылающийся на A.Form, он даже не должен компилироваться. Р>
Решение
Обычный виновник здесь - такие вещи, как события (в B.Logic
) или другие обратные ссылки на внешние объекты. Вы можете пометить поля как не для сериализации:
[NonSerialized]
private SomeType foo;
или с полевыми событиями:
[field: NonSerialized]
public event EventHandler Bar;
В дополнение к описанию, я предполагаю, что вы используете BinaryFormatter
; лично у меня есть оговорки по этому поводу - это очень хрупкий , Я бы предложил что-то не зависящее от реализации; XmlSerializer
, protobuf-net , Json.NET и т. д.