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.
>>>>>>
>>>>>>

Reply via email to