public object Decompress(object payload, PayloadDescriptor payloadDescriptor) { var compressedPayload = payload as object[]; var result = Activator.CreateInstance(payloadDescriptor.Type); var i = 0; // TODO: Throw error if the compressedPayload length != payloadDescriptor.Data length foreach (var data in payloadDescriptor.Data) { var value = compressedPayload[i++]; // Convert value to null if it was minified as a 0 value = CheckNull(value, data); if (value != null) { if (_provider.HasPayload(data.Type)) { data.SetValue(result, Decompress(ConvertToObjectArray(value), data.Type)); } else // We're not directly a payload at this points { if (value.GetType() != data.Type) { value = Convert.ChangeType(value, data.Type); } data.SetValue(result, value); } } } return result; }
public static void ValidateMembersToPayloadDescriptor(Type type, PayloadDescriptor payload) { var descriptors = payload.Data; var expectedMemers = type.GetFields(BindingFlags.Public | BindingFlags.Instance).Union<MemberInfo>(type.GetProperties(BindingFlags.Public | BindingFlags.Instance)); Assert.Equal(expectedMemers.Count(), descriptors.Count()); foreach (var descriptor in descriptors) { Assert.True(expectedMemers.Where(member => member.Name == descriptor.Name).Count() == 1); } }