BinaryFormatter собирает события - PullRequest
1 голос
/ 01 октября 2009

У меня есть класс хранения, в котором есть события при добавлении элементов в него. Мой класс формы обрабатывает событие. Когда я пытаюсь сериализовать его, средство форматирования жалуется на класс формы, не помеченный как сериализуемый. Конечно, я не хочу сериализовать его, однако я не могу пометить событие как [NonSerialize], поскольку оно не является полем ...

Что делать?

РЕДАКТИРОВАТЬ: Дополнительная информация:

Я пробовал оба блока анонимного кода:

Storage.Instance.AllPartners.OnAdded +=
    new Partners.Added(delegate(Partner p) { 
        viewPartners.RefreshData(); 
    });

И обработчик события как член:

Storage.Instance.AllPartners.OnAdded += new Partners.Added(AllPartners_OnAdded);

void AllPartners_OnAdded(Partner partner)
{
    viewPartners.RefreshData();
}

Ответы [ 3 ]

1 голос
/ 01 октября 2009

Ваш класс хранения содержит ссылку на вашу форму через событие, поэтому средство форматирования пытается сериализовать форму, поскольку она является частью состояния класса хранения.

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

1 голос
/ 13 октября 2009

Создайте событие с помощью NonSerializedAttribute . Однако, чтобы это работало, вы должны указать компилятору поместить атрибут в вспомогательное поле, а не в событие, в котором он сам.

[field:NonSerialized()] 
public event ChangedEventHandler OnAdded;
1 голос
/ 01 октября 2009

Возможно, вы сможете реализовать интерфейс ISerializable.

public class MyClass : ISerializable
{
    private int m_shouldBeSerialized;
    private int m_willNotBeSerialized;

    protected MyClass(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("MyValue", m_shouldBeSerialized);
    }

    #region ISerializable Members

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        m_shouldBeSerialized = info.GetInt32("MyValue");
    }

    #endregion
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...