diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index 8cb2dd3b..3bafc02a 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -4748,5 +4748,52 @@ keyword such as type of business."" }", json); } #endif + + public class ClassWithException + { + public IList Exceptions { get; set; } + + public ClassWithException() + { + Exceptions = new List(); + } + } + +#if !(SILVERLIGHT || WINDOWS_PHONE) + [Test] + public void SerializeException1() + { + ClassWithException classWithException = new ClassWithException(); + try + { + throw new Exception("Test Exception"); + } + catch (Exception ex) + { + classWithException.Exceptions.Add(ex); + } + string sex = JsonConvert.SerializeObject(classWithException); + ClassWithException dex = JsonConvert.DeserializeObject(sex); + Assert.AreEqual(dex.Exceptions[0].ToString(), dex.Exceptions[0].ToString()); + + sex = JsonConvert.SerializeObject(classWithException, Formatting.Indented); + + dex = JsonConvert.DeserializeObject(sex); // this fails! + Assert.AreEqual(dex.Exceptions[0].ToString(), dex.Exceptions[0].ToString()); + } +#endif + + public void DeserializeIDictionary() + { + IDictionary dictionary = JsonConvert.DeserializeObject("{'name':'value!'}"); + Assert.AreEqual(1, dictionary.Count); + Assert.AreEqual("value!", dictionary["name"]); + } + + public void DeserializeIList() + { + IList list = JsonConvert.DeserializeObject("['1', 'two', 'III']"); + Assert.AreEqual(3, list.Count); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs b/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs index 67219703..80c284cd 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs @@ -75,6 +75,10 @@ namespace Newtonsoft.Json.Serialization { CreatedType = ReflectionUtils.MakeGenericType(typeof(Dictionary<,>), keyType, valueType); } + else if (UnderlyingType == typeof(IDictionary)) + { + CreatedType = typeof (Dictionary); + } } internal IWrappedDictionary CreateWrapper(object dictionary)