diff options
author | JamesNK <james@newtonking.com> | 2011-08-03 05:53:49 +0400 |
---|---|---|
committer | JamesNK <james@newtonking.com> | 2011-08-03 05:53:49 +0400 |
commit | d8b32dfdc4ea875f3efa1457c55ffb05837078c1 (patch) | |
tree | 04282388bfc1288f7e6ff68b7f272451a0316f28 | |
parent | 44ab7f71dfcb4e07b6c1bf59241673a7054a5132 (diff) |
-Added support for deserializing IDictionary properties
-rw-r--r-- | Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs | 47 | ||||
-rw-r--r-- | Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs | 4 |
2 files changed, 51 insertions, 0 deletions
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index 8cb2dd3..3bafc02 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<Exception> Exceptions { get; set; }
+
+ public ClassWithException()
+ {
+ Exceptions = new List<Exception>();
+ }
+ }
+
+#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<ClassWithException>(sex);
+ Assert.AreEqual(dex.Exceptions[0].ToString(), dex.Exceptions[0].ToString());
+
+ sex = JsonConvert.SerializeObject(classWithException, Formatting.Indented);
+
+ dex = JsonConvert.DeserializeObject<ClassWithException>(sex); // this fails!
+ Assert.AreEqual(dex.Exceptions[0].ToString(), dex.Exceptions[0].ToString());
+ }
+#endif
+
+ public void DeserializeIDictionary()
+ {
+ IDictionary dictionary = JsonConvert.DeserializeObject<IDictionary>("{'name':'value!'}");
+ Assert.AreEqual(1, dictionary.Count);
+ Assert.AreEqual("value!", dictionary["name"]);
+ }
+
+ public void DeserializeIList()
+ {
+ IList list = JsonConvert.DeserializeObject<IList>("['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 6721970..80c284c 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<object, object>);
+ }
}
internal IWrappedDictionary CreateWrapper(object dictionary)
|