Hi Raymond, Exceptions implement ISerializable, and are serialized that way in Ignite. However, there is no "fallback" mechanism that you ask about (I should file a ticket, this is a good catch).
So the workaround is to use .NET BinaryFormatter to serialize non-IBInarizable types and write them as byte array (WriteByteArray / ReadByteArray). Does this work for you? Thanks, Pavel On Fri, Nov 23, 2018 at 2:05 AM Raymond Wilson <[email protected]> wrote: > Hi Pavel, > > I have been using your suggestion with good effect. Thank you again for > suggesting it. > > I just ran into a case where an exception was thrown that stated > System.AggregateException could not be serialised within this class. > > While the BinarizableSerializer is good an ensuring all our serialization > contexts are covered with IBinarySerializer, it seems obvious that things > like Exception derivatives can not be. How would you modify this approach > to make exceptions use the default reflective serialization? > > Thanks, > Raymond. > > > On Tue, Nov 13, 2018 at 9:20 AM Pavel Tupitsyn <[email protected]> > wrote: > >> Hi Raymond, >> >> Yes, you can do that by implementing IBinarySerializer like this: >> >> class BinarizableSerializer : IBinarySerializer >> { >> public void WriteBinary(object obj, IBinaryWriter writer) >> { >> if (obj is IBinarizable bin) >> { >> bin.WriteBinary(writer); >> } >> >> throw new Exception("Not IBinarizable: " + obj.GetType()); >> >> } >> >> public void ReadBinary(object obj, IBinaryReader reader) >> { >> if (obj is IBinarizable bin) >> { >> bin.ReadBinary(reader); >> } >> >> throw new Exception("Not IBinarizable: " + obj.GetType()); >> } >> } >> >> Then set it globally in IgniteConfiguration: >> >> var cfg = new IgniteConfiguration >> { >> BinaryConfiguration = new BinaryConfiguration >> { >> Serializer = new BinarizableSerializer() >> } >> }; >> >> >> >> On Thu, Nov 8, 2018 at 9:28 PM Raymond Wilson <[email protected]> >> wrote: >> >>> Hi Denis, >>> >>> Yes, I understand reflective serialisation uses binarizable >>> serialisation under the hood (and it's fast and easy to use). But it has >>> issues in the face of schema changes so it is better (and recommended in >>> the Ignite docs) to use Binarizable serialization for production. >>> >>> I want to make sure all my serialization contexts are covered by >>> explicit IBinarizable serialization. A simple approach would be to turn off >>> reflective serialization to ensure cases where we have missed it fail >>> explicitly. Is that possible? >>> >>> Thanks, >>> Raymond. >>> >>> >>> On Thu, Nov 8, 2018 at 1:10 PM Denis Magda <[email protected]> wrote: >>> >>>> Hi Raymond, >>>> >>>> If to believe this page, the reflective serialization converts an >>>> object to the binary format (sort of marked with IBaniralizable interface >>>> implicitly): >>>> >>>> https://apacheignite-net.readme.io/docs/serialization#section-ignite-reflective-serialization >>>> >>>> -- >>>> Denis >>>> >>>> >>>> On Tue, Nov 6, 2018 at 1:01 PM Raymond Wilson < >>>> [email protected]> wrote: >>>> >>>>> We are currently converting our use of Ignite reflective serialisation >>>>> to use IBinarizable based serialisation [using Ignite 2.6 with c# client] >>>>> >>>>> What I would like to do is enforce a policy of not using reflective >>>>> serialisation to ensure we have all the bases covered. >>>>> >>>>> Is there a way to do this in Ignite? >>>>> >>>>> Thanks, >>>>> Raymond. >>>>> >>>>>
