Exemplo n.º 1
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));
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
        private static object Deserialize(Type expected, BinaryTokenStreamReader stream)
        {
            DeserializeCounter++;
            var result = new ClassWithCustomSerializer();

            result.IntProperty    = stream.ReadInt();
            result.StringProperty = stream.ReadString();
            return(result);
        }
        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);
            }
        }
 public static object Deserializer(Type expected, BinaryTokenStreamReader stream) =>
 Deserialize(stream.ReadBytes(stream.ReadInt()));
Exemplo n.º 6
0
            public static System.Object Deserializer(System.Type expected, BinaryTokenStreamReader stream)
            {
                var result = new HeadersContainer();

                Orleans.Serialization.DeserializationContext.Current.RecordObject(result);
                var headers = (Headers)stream.ReadInt();

                if ((headers & Headers.CACHE_INVALIDATION_HEADER) != Headers.NONE)
                {
                    var n = stream.ReadInt();
                    if (n > 0)
                    {
                        var list = result.CacheInvalidationHeader = new List <ActivationAddress>(n);
                        for (int i = 0; i < n; i++)
                        {
                            list.Add((ActivationAddress)ReadObj(typeof(ActivationAddress), stream));
                        }
                    }
                }

                if ((headers & Headers.CATEGORY) != Headers.NONE)
                {
                    result.Category = (Categories)stream.ReadByte();
                }

                if ((headers & Headers.DEBUG_CONTEXT) != Headers.NONE)
                {
                    result.DebugContext = stream.ReadString();
                }

                if ((headers & Headers.DIRECTION) != Headers.NONE)
                {
                    result.Direction = (Message.Directions)stream.ReadByte();
                }

                if ((headers & Headers.EXPIRATION) != Headers.NONE)
                {
                    result.Expiration = stream.ReadDateTime();
                }

                if ((headers & Headers.FORWARD_COUNT) != Headers.NONE)
                {
                    result.ForwardCount = stream.ReadInt();
                }

                if ((headers & Headers.GENERIC_GRAIN_TYPE) != Headers.NONE)
                {
                    result.GenericGrainType = stream.ReadString();
                }

                if ((headers & Headers.CORRELATION_ID) != Headers.NONE)
                {
                    result.Id = (Orleans.Runtime.CorrelationId)ReadObj(typeof(Orleans.Runtime.CorrelationId), stream);
                }

                if ((headers & Headers.ALWAYS_INTERLEAVE) != Headers.NONE)
                {
                    result.IsAlwaysInterleave = ReadBool(stream);
                }

                if ((headers & Headers.IS_NEW_PLACEMENT) != Headers.NONE)
                {
                    result.IsNewPlacement = ReadBool(stream);
                }

                if ((headers & Headers.READ_ONLY) != Headers.NONE)
                {
                    result.IsReadOnly = ReadBool(stream);
                }

                if ((headers & Headers.IS_UNORDERED) != Headers.NONE)
                {
                    result.IsUnordered = ReadBool(stream);
                }

                if ((headers & Headers.NEW_GRAIN_TYPE) != Headers.NONE)
                {
                    result.NewGrainType = stream.ReadString();
                }

                if ((headers & Headers.REJECTION_INFO) != Headers.NONE)
                {
                    result.RejectionInfo = stream.ReadString();
                }

                if ((headers & Headers.REJECTION_TYPE) != Headers.NONE)
                {
                    result.RejectionType = (RejectionTypes)stream.ReadByte();
                }

                if ((headers & Headers.REQUEST_CONTEXT) != Headers.NONE)
                {
                    var c           = stream.ReadInt();
                    var requestData = new Dictionary <string, object>(c);
                    for (int i = 0; i < c; i++)
                    {
                        requestData[stream.ReadString()] = SerializationManager.DeserializeInner(null, stream);
                    }
                    result.RequestContextData = requestData;
                }

                if ((headers & Headers.RESEND_COUNT) != Headers.NONE)
                {
                    result.ResendCount = stream.ReadInt();
                }

                if ((headers & Headers.RESULT) != Headers.NONE)
                {
                    result.Result = (Orleans.Runtime.Message.ResponseTypes)stream.ReadByte();
                }

                if ((headers & Headers.SENDING_ACTIVATION) != Headers.NONE)
                {
                    result.SendingActivation = stream.ReadActivationId();
                }

                if ((headers & Headers.SENDING_GRAIN) != Headers.NONE)
                {
                    result.SendingGrain = stream.ReadGrainId();
                }

                if ((headers & Headers.SENDING_SILO) != Headers.NONE)
                {
                    result.SendingSilo = stream.ReadSiloAddress();
                }

                if ((headers & Headers.TARGET_ACTIVATION) != Headers.NONE)
                {
                    result.TargetActivation = stream.ReadActivationId();
                }

                if ((headers & Headers.TARGET_GRAIN) != Headers.NONE)
                {
                    result.TargetGrain = stream.ReadGrainId();
                }

                if ((headers & Headers.TARGET_OBSERVER) != Headers.NONE)
                {
                    result.TargetObserverId = (Orleans.Runtime.GuidId)ReadObj(typeof(Orleans.Runtime.GuidId), stream);
                }

                if ((headers & Headers.TARGET_SILO) != Headers.NONE)
                {
                    result.TargetSilo = stream.ReadSiloAddress();
                }

                return((HeadersContainer)result);
            }