public T Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var objectType = typeof(T);
            var tracker    = (T)Activator.CreateInstance(objectType);

            var           length = reader.ReadArrayHeader();
            List <string> list   = new List <string>();

            for (var i = 0; i < length; i++)
            {
                list.Add(reader.ReadString());
            }

            for (var i = 0; i < length; i++)
            {
                var pi = objectType.GetProperty(list[i]);
                if (reader.TryReadNil())
                {
                    pi.SetValue(tracker, null, null);
                }
                else
                {
                    var data   = reader.ReadBytes();
                    var method = SerializeMethodCache.GetDeserializeMethod(pi.PropertyType);
                    var value  = method.Invoke(null, new object[] { data.Value, options, null });
                    pi.SetValue(tracker, value, null);
                }
            }

            return(tracker);
        }
Exemple #2
0
        public static IPocoTracker <T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var tracker = new TrackablePocoTracker <T>();
            var length  = reader.ReadArrayHeader();

            List <string> list = new List <string>();

            for (var i = 0; i < length; i++)
            {
                list.Add(reader.ReadString());
            }

            var objectType = typeof(T);

            for (var i = 0; i < length; i++)
            {
                var pi = objectType.GetProperty(list[i]);
                if (reader.TryReadNil())
                {
                    tracker.TrackSet(pi, null, null);
                }
                else
                {
                    var data   = reader.ReadBytes();
                    var method = SerializeMethodCache.GetDeserializeMethod(pi.PropertyType);
                    var value  = method.Invoke(null, new object[] { data.Value, options, null });
                    tracker.TrackSet(pi, null, value);
                }
            }

            return(tracker);
        }