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); }
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); }