public object Deserialize(Type expectedType, BinaryTokenStreamReader reader)
 {
     DeserializeCalled = true;
     return(new FakeSerialized {
         SomeData = "fake deserialization"
     });
 }
示例#2
0
        private static void VerifyUsingFallbackSerializer(object ob)
        {
            var writer = new BinaryTokenStreamWriter();

            SerializationManager.FallbackSerializer(ob, writer, ob.GetType());
            var bytes = writer.ToByteArray();

            byte[] defaultFormatterBytes;
            var    formatter = new BinaryFormatter();

            using (var stream = new MemoryStream())
            {
                formatter.Serialize(stream, ob);
                stream.Flush();
                defaultFormatterBytes = stream.ToArray();
            }

            var reader   = new BinaryTokenStreamReader(bytes);
            var serToken = reader.ReadToken();

            Assert.Equal(SerializationTokenType.Fallback, serToken);
            var length = reader.ReadInt();

            Assert.Equal(length, defaultFormatterBytes.Length);
            var segment = new ArraySegment <byte>(bytes, reader.CurrentPosition, bytes.Length - reader.CurrentPosition);

            Assert.True(segment.SequenceEqual(defaultFormatterBytes));
        }
示例#3
0
        internal static object Deserialize(Type unused, BinaryTokenStreamReader stream)
        {
            var target  = stream.ReadString();
            var message = MessageEnvelope.Serializer.Deserialize(stream);

            return(new RequestEnvelope(target, message));
        }
示例#4
0
        public void UniqueKeySerializationShouldReproduceAnIdenticalObject()
        {
            {
                var expected = UniqueKey.NewKey(Guid.NewGuid());
                BinaryTokenStreamWriter writer = new BinaryTokenStreamWriter();
                writer.Write(expected);
                BinaryTokenStreamReader reader = new BinaryTokenStreamReader(writer.ToBytes());
                var actual = reader.ReadUniqueKey();
                Assert.Equal(expected, actual); // UniqueKey.Serialize() and UniqueKey.Deserialize() failed to reproduce an identical object (case #1).
            }

            {
                var kx       = random.Next().ToString(CultureInfo.InvariantCulture);
                var expected = UniqueKey.NewKey(Guid.NewGuid(), category: UniqueKey.Category.KeyExtGrain, keyExt: kx);
                BinaryTokenStreamWriter writer = new BinaryTokenStreamWriter();
                writer.Write(expected);
                BinaryTokenStreamReader reader = new BinaryTokenStreamReader(writer.ToBytes());
                var actual = reader.ReadUniqueKey();
                Assert.Equal(expected, actual); // UniqueKey.Serialize() and UniqueKey.Deserialize() failed to reproduce an identical object (case #2).
            }

            {
                var kx       = random.Next().ToString(CultureInfo.InvariantCulture) + new String('*', 400);
                var expected = UniqueKey.NewKey(Guid.NewGuid(), category: UniqueKey.Category.KeyExtGrain, keyExt: kx);
                BinaryTokenStreamWriter writer = new BinaryTokenStreamWriter();
                writer.Write(expected);
                BinaryTokenStreamReader reader = new BinaryTokenStreamReader(writer.ToBytes());
                var actual = reader.ReadUniqueKey();
                Assert.Equal(expected, actual); // UniqueKey.Serialize() and UniqueKey.Deserialize() failed to reproduce an identical object (case #3).
            }
        }
示例#5
0
        object IMessageSerializer.Deserialize(BinaryTokenStreamReader stream)
        {
            var bytes = (byte[])SerializationManager.DeserializeInner(typeof(byte[]), stream);
            var json  = Encoding.Default.GetString(bytes);

            return(JsonConvert.DeserializeObject(json, settings));
        }
        public void ILSerializer_AllowCopiedFieldsToDifferFromSerializedFields()
        {
            var input = new FieldTest
            {
                One   = 1,
                Two   = 2,
                Three = 3
            };

            var generator   = new ILSerializerGenerator();
            var serializers = generator.GenerateSerializer(input.GetType(), f => f.Name != "One", f => f.Name != "Three");
            var copy        = (FieldTest)serializers.DeepCopy(input);

            Assert.Equal(1, copy.One);
            Assert.Equal(2, copy.Two);
            Assert.Equal(0, copy.Three);

            var writer = new BinaryTokenStreamWriter();

            serializers.Serialize(input, writer, input.GetType());
            var reader       = new BinaryTokenStreamReader(writer.ToByteArray());
            var deserialized = (FieldTest)serializers.Deserialize(input.GetType(), reader);

            Assert.Equal(0, deserialized.One);
            Assert.Equal(2, deserialized.Two);
            Assert.Equal(3, deserialized.Three);
        }
示例#7
0
        protected internal static object DeserializeGrainReference(Type t, BinaryTokenStreamReader stream)
        {
            GrainId     id                 = stream.ReadGrainId();
            SiloAddress silo               = null;
            GuidId      observerId         = null;
            byte        siloAddressPresent = stream.ReadByte();

            if (siloAddressPresent != 0)
            {
                silo = stream.ReadSiloAddress();
            }
            bool expectObserverId = id.IsClient;

            if (expectObserverId)
            {
                observerId = GuidId.DeserializeFromStream(stream);
            }
            // store as null, serialize as empty.
            var genericArg = stream.ReadString();

            if (String.IsNullOrEmpty(genericArg))
            {
                genericArg = null;
            }

            if (expectObserverId)
            {
                return(NewObserverGrainReference(id, observerId));
            }
            return(FromGrainId(id, genericArg, silo));
        }
        public void AzureQueueBatchContainerV2_Serialize_IfNotNull()
        {
            var container = CreateAzureQueueBatchContainer();
            var writer    = new SerializationContext
            {
                StreamWriter = new BinaryTokenStreamWriter()
            };

            AzureQueueBatchContainerV2.Serialize(container, writer, null);
            var reader = new DeserializationContext
            {
                StreamReader = new BinaryTokenStreamReader(writer.StreamWriter.ToByteArray())
            };

            var deserialized = AzureQueueBatchContainerV2.Deserialize(typeof(AzureQueueBatchContainer), reader) as AzureQueueBatchContainerV2;

            ValidateIdenticalQueueBatchContainerButNotSame(container, deserialized);

            var streamWriter = new BinaryTokenStreamWriter();

            SerializationManager.Serialize(container, streamWriter);
            var streamReader = new BinaryTokenStreamReader(streamWriter.ToByteArray());

            deserialized = SerializationManager.Deserialize <AzureQueueBatchContainerV2>(streamReader);
            ValidateIdenticalQueueBatchContainerButNotSame(container, deserialized);
        }
示例#9
0
        internal static object Deserialize(Type t, BinaryTokenStreamReader stream)
        {
            var target  = (ActorPath)SerializationManager.DeserializeInner(typeof(ActorPath), stream);
            var message = MessageEnvelope.Deserializer((byte[])SerializationManager.DeserializeInner(typeof(byte[]), stream));

            return(new RequestEnvelope(target, message));
        }
示例#10
0
        /// <summary>
        /// Deserializes an event sequence token
        /// </summary>
        /// <param name="expected">The expected type.</param>
        /// <param name="reader">The binary stream to read from.</param>
        /// <returns></returns>
        public static object Deserialize(Type expected, BinaryTokenStreamReader reader)
        {
            var result = new EventSequenceTokenV2(reader.ReadLong(), reader.ReadInt());

            DeserializationContext.Current.RecordObject(result);
            return(result);
        }
        internal static object DeserializeGrainCancellationToken(Type expected, BinaryTokenStreamReader stream)
        {
            var cancellationRequested = stream.ReadToken() == SerializationTokenType.True;
            var tokenId = stream.ReadGuid();

            return(new GrainCancellationToken(tokenId, cancellationRequested));
        }
示例#12
0
        internal static object Deserialize(Type t, BinaryTokenStreamReader stream)
        {
            var sender  = (ActorPath)SerializationManager.DeserializeInner(typeof(ActorPath), stream);
            var message = MessageEnvelope.Deserializer((byte[])SerializationManager.DeserializeInner(typeof(byte[]), stream));

            return(new NotificationEnvelope(sender, message));
        }
            public IBatchContainer GetBatchContainer(ref CachedMessage cachedMessage)
            {
                //Deserialize payload
                var             stream    = new BinaryTokenStreamReader(cachedMessage.Payload);
                MemoryEventData eventData = (MemoryEventData)SerializationManager.Deserialize(stream);

                return(new MemoryBatchContainer(eventData, cachedMessage.SequenceNumber));
            }
示例#14
0
 public IBatchContainer GetBatchContainer(ref CachedMessage cachedMessage)
 {
     //Deserialize payload
     var stream = new BinaryTokenStreamReader(cachedMessage.Payload);
     object payloadObject = SerializationManager.Deserialize(stream);
     return new GeneratedBatchContainer(cachedMessage.StreamGuid, cachedMessage.StreamNamespace,
         payloadObject, new EventSequenceToken(cachedMessage.SequenceNumber));
 }
示例#15
0
        private static object Deserialize(Type expected, BinaryTokenStreamReader stream)
        {
            DeserializeCounter++;
            var result = new ClassWithCustomSerializer();

            result.IntProperty    = stream.ReadInt();
            result.StringProperty = stream.ReadString();
            return(result);
        }
示例#16
0
        public override object Deserialize(BinaryTokenStreamReader stream)
        {
            var bytes = (byte[])SerializationManager.DeserializeInner(typeof(byte[]), stream);

            using (var ms = new MemoryStream(bytes))
            {
                var formatter = new BinaryFormatter();
                return(formatter.Deserialize(ms));
            }
        }
示例#17
0
        private GrainReference RoundTripGrainReferenceOrleansSerializer(GrainReference input)
        {
            BinaryTokenStreamWriter writer = new BinaryTokenStreamWriter();

            GrainReference.SerializeGrainReference(input, writer, typeof(GrainReference));
            BinaryTokenStreamReader reader = new BinaryTokenStreamReader(writer.ToBytes());
            GrainReference          output = (GrainReference)GrainReference.DeserializeGrainReference(typeof(GrainReference), reader);

            return(output);
        }
            public IBatchContainer GetBatchContainer(ref CachedMessage cachedMessage)
            {
                //Deserialize payload
                var stream = new BinaryTokenStreamReader(cachedMessage.Payload.ToArray());
                //object payloadObject = SerializationManager.Deserialize(stream);
                var payloadObject = SerializationManager.Deserialize <List <object> >(stream);

                return(new PlainBatchContainer(cachedMessage.StreamGuid, cachedMessage.StreamNamespace,
                                               payloadObject, new SimpleSequenceToken(cachedMessage.SequenceNumber)));
            }
        public object Deserialize(Type expectedType, BinaryTokenStreamReader reader)
        {
            var n     = reader.ReadInt();
            var bytes = reader.ReadBytes(n);

            using (var stream = new MemoryStream(bytes))
            {
                var res = _serializer.Deserialize(stream);
                return(res);
            }
        }
示例#20
0
        public IBatchContainer GetBatchContainer(ref CachedMessage cachedMessage)
        {
            //Deserialize payload
            int readOffset = 0;
            ArraySegment <byte> payload = SegmentBuilder.ReadNextBytes(cachedMessage.Segment, ref readOffset);
            var    stream        = new BinaryTokenStreamReader(payload);
            object payloadObject = this.serializationManager.Deserialize(stream);

            return(new GeneratedBatchContainer(cachedMessage.StreamId,
                                               payloadObject, new EventSequenceTokenV2(cachedMessage.SequenceNumber)));
        }
示例#21
0
        private static object DeserializeBody(SerializationManager serializationManager, List <ArraySegment <byte> > bytes)
        {
            if (bytes == null)
            {
                return(null);
            }

            var stream = new BinaryTokenStreamReader(bytes);

            return(serializationManager.Deserialize(stream));
        }
示例#22
0
        //[Benchmark]
        public int OrleansReadEachByte()
        {
            var sum    = 0;
            var reader = new BinaryTokenStreamReader(this.orleansBytes);

            for (var i = 0; i < this.readBytesLength; i++)
            {
                sum ^= reader.ReadByte();
            }
            return(sum);
        }
示例#23
0
        public static void VerifyUsingFallbackSerializer(object ob)
        {
            var writer = new BinaryTokenStreamWriter();

            SerializationManager.FallbackSerializer(ob, writer, ob.GetType());
            var bytes = writer.ToByteArray();

            var reader   = new BinaryTokenStreamReader(bytes);
            var serToken = reader.ReadToken();

            Assert.Equal(SerializationTokenType.Fallback, serToken);
        }
示例#24
0
        public Message(List <ArraySegment <byte> > header, List <ArraySegment <byte> > body)
        {
            metadata = new Dictionary <string, object>();

            var input = new BinaryTokenStreamReader(header);

            headers = SerializationManager.DeserializeMessageHeaders(input);
            BufferPool.GlobalPool.Release(header);

            bodyBytes   = body;
            bodyObject  = null;
            headerBytes = null;
        }
示例#25
0
        /// <summary>
        /// Deserializes the container from the data stream.
        /// </summary>
        /// <param name="expected">The expected type</param>
        /// <param name="reader">The stream reader</param>
        /// <returns>The deserialized value</returns>
        public static object Deserialize(Type expected, BinaryTokenStreamReader reader)
        {
            var deserialized = new AzureQueueBatchContainerV2();

            DeserializationContext.Current.RecordObject(deserialized);
            var guid       = reader.ReadGuid();
            var ns         = reader.ReadString();
            var eventToken = SerializationManager.DeserializeInner <EventSequenceTokenV2>(reader);
            var events     = SerializationManager.DeserializeInner <List <object> >(reader);
            var context    = SerializationManager.DeserializeInner <Dictionary <string, object> >(reader);

            deserialized.SetValues(guid, ns, events, context, eventToken);
            return(deserialized);
        }
示例#26
0
        public void EventHubSequenceTokenV2_Serialize_IfNotNull()
        {
            var writer = new BinaryTokenStreamWriter();
            var token  = new EventHubSequenceTokenV2("name", long.MaxValue, int.MaxValue);

            EventHubSequenceTokenV2.Serialize(token, writer, null);
            var reader       = new BinaryTokenStreamReader(writer.ToByteArray());
            var deserialized = EventHubSequenceTokenV2.Deserialize(typeof(EventHubSequenceTokenV2), reader) as EventHubSequenceTokenV2;

            Assert.NotNull(deserialized);
            Assert.NotSame(token, deserialized);
            Assert.Equal(token.EventIndex, deserialized.EventIndex);
            Assert.Equal(token.SequenceNumber, deserialized.SequenceNumber);
        }
示例#27
0
        // Initializes body and header but does not take ownership of byte.
        // Caller must clean up bytes
        public Message(List <ArraySegment <byte> > header, List <ArraySegment <byte> > body, bool deserializeBody = false)
        {
            var input = new BinaryTokenStreamReader(header);

            Headers = SerializationManager.DeserializeMessageHeaders(input);
            if (deserializeBody)
            {
                bodyObject = DeserializeBody(body);
            }
            else
            {
                bodyBytes = body;
            }
        }
示例#28
0
        public void Serialize_CustomSerializer()
        {
            var original = new ClassWithCustomSerializer()
            {
                IntProperty = -3, StringProperty = "Goodbye"
            };
            var writeStream = new BinaryTokenStreamWriter();

            this.fixture.SerializationManager.Serialize(original, writeStream);
            Assert.Equal(1, ClassWithCustomSerializer.SerializeCounter); //Custom serializer was not called

            var readStream = new BinaryTokenStreamReader(writeStream.ToBytes());
            var obj        = this.fixture.SerializationManager.Deserialize(readStream);

            Assert.Equal(1, ClassWithCustomSerializer.DeserializeCounter); //Custom deserializer was not called
        }
示例#29
0
        internal static object Reserialize(IMessageSerializer serializer, object message)
        {
            if (serializer == null)
            {
                return(message);
            }

            var writer = new BinaryTokenStreamWriter();

            serializer.Serialize(message, writer);

            var bytes  = writer.ToByteArray();
            var reader = new BinaryTokenStreamReader(bytes);

            return(serializer.Deserialize(reader));
        }
示例#30
0
 public OrleansTransactionAbortedException MustAbort(SerializationManager sm)
 {
     if (OriginalException != null)
     {
         var reader = new BinaryTokenStreamReader(OriginalException);
         return(sm.Deserialize <OrleansTransactionAbortedException>(reader));
     }
     else if (PendingCalls != 0)
     {
         return(new OrleansOrphanCallException(TransactionId.ToString(), PendingCalls));
     }
     else
     {
         return(null);
     }
 }