Как игнорировать элемент класса событий для двоичной сериализации?

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

Вопрос

Мне нужно избегать сериализации элемента класса событий, потому что когда событие обрабатывается объектом, который не помечен как сериализация, сериализация не удастся.

Я попробовал использовать неразрешенный атрибут на члене класса событий, но он не скомпенсируется. Эта линия кода:

<NonSerialized()> Public Event PropertyValueChanged()

производит следующую ошибку:

Атрибут «NonserializedTtribute» не может быть применен к «PropertyValueChangeded», потому что атрибут недействителен в этом типе объявления.

Public Event PropertyValueChanged() ' compiles but needs the extra handling described below

Есть ли другой способ избежать сериализации членов событий?

Это не проблема, если событие не обрабатывается, и я могу работать вокруг него, клонируя объекты (и игнорируя событие) перед их сериалом. Просто интересно, есть ли лучший способ.

Спасибо.

Это было полезно?

Решение

В C # вы можете сделать это, как показано ниже, так что я надеяться Это переводится идентично VB.

Обратите внимание, что это относится только к полевым событиям (т.е. где у вас нет собственного add/remove):

[field: NonSerialized]
public event EventType EventName;

В противном случае что-то вроде:

[NonSerialized]
EventType backingField;
public event EventType {
    add { backingField += value; }
    remove { backingField -= value; }
}

Другие советы

Он не работает, потому что компилятор на самом деле генерирует поле для события. Чтобы включить его, просто префикс своего атрибута с полем:

[field: NonSerialized]
public event EventHandler PropertyValueChanged;

Как я это сделал в прошлом для проектов, реализует IXMLSERializable интерфейс и контролировать мою сериализацию вручную. Я нахожу это делает сериализующие элементы управления на основе GUI (с большим количеством событий) намного проще.

IXMLSERializable

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