4

次のコードを使用して、protobuf-net を使用して EventHandler でクラスをシリアル化しようとしています。

    [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 がまだ null であるため、2 番目のアサーションは失敗します。私は何が欠けていますか?

4

1 に答える 1

4

ここのドキュメントから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-03T22:13:07.663 に答える