Protobuf-net: как сериализовать EventHandler

91
10

Я пытаюсь сериализовать класс с помощью EventHandler, используя protobuf-net, используя следующий код:


    [ProtoContract]
class Thing
{
[ProtoMember(5, AsReference = true)]
public EventHandler _DoSomething;

public event EventHandler DoSomething
{
add { _DoSomething += value; }
remove { _DoSomething -= value; }
}

public void PerformSomething(object sender, EventArgs args)
{
}
}

[TestMethod]
public void SerializingAClassWithAnEvent_Deserializes()
{
var Guy1 = new Thing() {};
var Guy2 = new Thing() {};
Guy2.DoSomething += Guy1.PerformSomething;
Assert.IsNotNull(Guy2._DoSomething);

MemoryStream buffer = new MemoryStream();
Serializer.Serialize(buffer, Guy2);
MemoryStream afterStream = new MemoryStream(buffer.ToArray());
var outGuy = Serializer.Deserialize<Thing>(afterStream);

Assert.IsNotNull(outGuy._DoSomething);
}


Этот код компилируется и работает нормально, но второе утверждение терпит неудачу, поскольку _DoSomething EventHandler по-прежнему является нулевым. Что мне не хватает?

спросил(а) 2013-01-04T01:00:00+04:00 7 лет, 9 месяцев назад
1
Решение
90

Из документации здесь EventHandlers не поддерживаются

custom classes that:
are marked as data-contract;
have a parameterless constructor;
for Silverlight: are public
many common primitives etc
single dimension arrays: T[]
List<T> / IList<T>
Dictionary<TKey,TValue> / IDictionary<TKey,TValue>
any type which implements IEnumerable<T> and has an Add(T) method

ответил(а) 2013-01-04T01:13:00+04:00 7 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема