2009-07-23 3 views
14

Когда следующий класс сериализуется с BinaryFormatter, любые объекты, подписавшиеся на событие Roar, также будут сериализованы, так как ссылки на эти объекты хранятся делегатом EventHandler.Как игнорировать подписчиков событий при сериализации объекта?

[Serializable] 
public class Lion 
{ 
    public event EventHandler Roar; 

    public string Name { get; set; } 
    public float Fluffiness { get; set; } 

    public Lion(string name, float fluffiness) 
    { 
     Name = name; 
     Fluffiness = fluffiness; 
    } 

    public void Poke() 
    { 
     Roar(); // Could be null, etc.. 
    } 
} 

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

Помещение атрибута [NonSerializable] на event не компилируется.


Примечание: Я отвечаю на свой вопрос, поскольку, по-моему, было бы полезно иметь информацию на сайте!

Вопросы и ответы: Также прекрасно спросить и ответить на свой вопрос, но притворяйтесь, что вы находитесь под угрозой: произнесите его в форме вопроса.

ответ

25

Вы должны включить «field:» как часть атрибута на event[NonSerialized].

т.е .:

[field: NonSerialized] 
public event EventHandler Roar; 
+0

Спасибо. Но почему? –

+0

Это связано с тем, что для параметра System.NonSerializedAttribute есть ограничение: оно может применяться только к полям! – Grubl3r

Смежные вопросы