public static object PopulateObjectMembers(object obj, MemberInfo[] members, object[] data)
{
if (obj == null)
{
throw new ArgumentNullException(nameof(obj));
}
if (members == null)
{
throw new ArgumentNullException(nameof(members));
}
if (data == null)
{
throw new ArgumentNullException(nameof(data));
}
if (members.Length != data.Length)
{
throw new ArgumentException(SR.Argument_DataLengthDifferent);
}
for (int i = 0; i < members.Length; i++)
{
MemberInfo member = members[i];
if (member == null)
{
throw new ArgumentNullException(nameof(members), SR.Format(SR.ArgumentNull_NullMember, i));
}
// If we find an empty, it means that the value was never set during deserialization.
// This is either a forward reference or a null. In either case, this may break some of the
// invariants mantained by the setter, so we'll do nothing with it for right now.
object value = data[i];
if (value == null)
{
continue;
}
// If it's a field, set its value.
FieldInfo field = member as FieldInfo;
if (field != null)
{
field.SetValue(obj, data[i]);
continue;
}
// Otherwise, it's not supported.
throw new SerializationException(SR.Serialization_UnknownMemberInfo);
}
return obj;
}