Yes, I want to throw exceptions essentially for all application types.
Things like ephemeral exceptions I don't need serialization control over.

Writing the object seems simple enough as you have suggested.

However, reading it back is less simple due to the way IBinarySerializer
calls ReadBinary in the context of the object. reader.ReadBinary() returns
an instance which is at odds with the instance passed into
IBinarySerializer.ReadBinary, so I'm not sure how to get reader.ReadObject
to deserialize the state into the passed obj parameter.

Thanks,
Raymond.


On Sat, Nov 24, 2018 at 6:41 AM Pavel Tupitsyn <[email protected]> wrote:

> 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