public WritableAdjustment(Adjustment input) : this() { name = input.GetType().FullName; foreach (var i in input.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (i.DeclaringType == input.GetType() || i.DeclaringType == typeof(Adjustment)) { if (i.GetGetMethod()?.IsPublic == true) { if (i.GetSetMethod()?.IsPublic == true) { if (i.PropertyType.HasAttribute <SerializableAttribute>()) { names.Add(i.Name); values.Add(i.GetValue(input)); } } } } } }