Sorry, I'm wrong. You can of course just call writer.WriteObject(..) as a fallback, no need for BinaryFormatter. Your only goal is to throw exception for *some* types, right?
On Fri, Nov 23, 2018 at 8:37 PM Pavel Tupitsyn <[email protected]> wrote: > 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. >>>>>> >>>>>>
