Как объект может получить ссылку на класс, который находится в другой (и не связанной) сборке?

StackOverflow https://stackoverflow.com/questions/831835

Вопрос

У меня есть два проекта: 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 и т. д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top