diff --git a/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs b/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs index bec1c6d44e34e2..09d4f271aba72f 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.Binder/src/ConfigurationBinder.cs @@ -461,24 +461,30 @@ private static void BindDictionary( PropertyInfo setter = dictionaryType.GetProperty("Item", DeclaredOnlyLookup)!; foreach (IConfigurationSection child in config.GetChildren()) { - object? item = BindInstance( - type: valueType, - instance: null, - config: child, - options: options); - if (item != null) + try { - if (keyType == typeof(string)) - { - string key = child.Key; - setter.SetValue(dictionary, item, new object[] { key }); - } - else if (keyTypeIsEnum) + object? item = BindInstance( + type: valueType, + instance: null, + config: child, + options: options); + if (item != null) { - object key = Enum.Parse(keyType, child.Key); - setter.SetValue(dictionary, item, new object[] { key }); + if (keyType == typeof(string)) + { + string key = child.Key; + setter.SetValue(dictionary, item, new object[] { key }); + } + else if (keyTypeIsEnum) + { + object key = Enum.Parse(keyType, child.Key); + setter.SetValue(dictionary, item, new object[] { key }); + } } } + catch + { + } } } diff --git a/src/libraries/Microsoft.Extensions.Configuration.Binder/tests/ConfigurationCollectionBindingTests.cs b/src/libraries/Microsoft.Extensions.Configuration.Binder/tests/ConfigurationCollectionBindingTests.cs index 140aedc7eee350..38ab7766d391d6 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.Binder/tests/ConfigurationCollectionBindingTests.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.Binder/tests/ConfigurationCollectionBindingTests.cs @@ -74,6 +74,23 @@ public void GetListInvalidValues() Assert.True(list[0]); } + [Fact] + public void GetDictionaryInvalidValues() + { + var input = new Dictionary + { + {"InvalidDictionary:0", "true"}, + {"InvalidDictionary:1", "invalid"}, + }; + var config = new ConfigurationBuilder().AddInMemoryCollection(input).Build(); + var dict = new Dictionary(); + + config.Bind("InvalidDictionary", dict); + + Assert.Single(dict); + Assert.True(dict["0"]); + } + [Fact] public void BindList() {