/// <summary> /// Saves changes to <see cref="Out"/> to the /// given IConfigurationSource. /// </summary> /// <param name="source">Source to use as the primary source.</param> public void SaveChanges(IConfigurationSource <T> source) { var @base = CreateBaseConfig(); var mrg = new T(); mrg.MergeWith(_primarySource.Config); mrg.MergeWith(Out, defaultObject: @base); // Copy over the values for all "always serialized" properties foreach (var prop in _propertiesAlwaysSerialized .Select(propName => typeof(T).GetProperty(propName))) { prop.SetValue(mrg, prop.GetValue(Out, null), null); } source.PartialSave(mrg, GetProperties(@base, _primarySource.Config, PropertyStatus.Changed) .Select(p => p.Name) .Concat(_propertiesAlwaysSerialized) .Except(_propertiesNeverSerialized)); }