예제 #1
0
        public override void Write(void *fieldAddress, SerializerOutput output)
        {
            var obj = Unsafe.Read <object>(fieldAddress);

            if (obj == null)
            {
                output.WriteNull();
                return;
            }

            if (_stack >= MaxStack)
            {
                throw new CircularReferenceException("Circular references are not suported!");
            }

            _stack++;

            var track = output.BeginSizeTrack();

            var pinnable = Unsafe.As <object, PinnableObject>(ref obj);

            fixed(byte *objectAddress = &pinnable.Pinnable)
            {
                _fieldsSerializer.Write(objectAddress, output);
            }

            output.WriteSizeTrack(track);

            _stack--;
        }
예제 #2
0
        public override void Write(void *fieldAddress, SerializerOutput output)
        {
            var track = output.BeginSizeTrack();

            _fieldsSerializer.Write((byte *)fieldAddress, output);

            output.WriteSizeTrack(track);
        }