On Saturday, 2 June 2018 at 20:11:17 UTC, Jacob Carlborg wrote:
On 2018-06-02 03:30, IntegratedDimensions wrote:
How can I modify the pre serialization and post serialization
values? I need to transform some variables that are stored but
I would like to do this easily "inline"(would be cool to be
able to provide a delegate to do the transformations at the
site of definition of the fields).
Use the "onSerializing" and "onSerialized" UDAs on a method.
"onSerializing" will be called before serializing and
"onSerialized" after serializing. Have a look at the unit tests
[1].
Also, how does orange handle properties? Seems it just deals
with fields and ignores all functions(does not use getter and
setter of properties). This is valid, of course, just want to
make sure. I still need to be able to transform values pre and
post though.
That is correct, it only (de)serializes fields. If you want to
(de)serialize proprieties, implement the "toData" and
"fromData". See the example in the wiki [2]. Note, by
implementing these methods none of the standard serialization
will occur. If you want to serialize the fields as well, you
need to do that as well when implementing "toData" and
"fromData".
It's also possible to implement these "methods" in a
non-intrusive way, i.e. for customizing serialization of third
party type [3].
[1]
https://github.com/jacob-carlborg/orange/blob/master/tests/Events.d#L39-L54
[2]
https://github.com/jacob-carlborg/orange/wiki/Custom-Serialization
[3]
https://github.com/jacob-carlborg/orange/blob/master/tests/NonIntrusive.d
Thanks.
I'm having problems preventing void* pointers from not being
serialized
..\..\..\orange\serialization\Serializer.d(975): Error:
expression `*value` is `void` and has no value
..\..\..\orange\serialization\Serializer.d(1491): Error: new can
only create structs, dynamic arrays or class objects, not `void`'s
and all I've added to my class is
@nonSerialized void* ptr;
It seems that the (de)serializer should just ignore all void's no
matter what. They can't be serialized to any meaningful thing.
Maybe spit a warning out if the uda is not added. Usually pointer
values are not meant to be serialized anyways.