Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/Newtonsoft.Json.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamesNK <james@newtonking.com>2011-08-03 05:53:49 +0400
committerJamesNK <james@newtonking.com>2011-08-03 05:53:49 +0400
commitd8b32dfdc4ea875f3efa1457c55ffb05837078c1 (patch)
tree04282388bfc1288f7e6ff68b7f272451a0316f28
parent44ab7f71dfcb4e07b6c1bf59241673a7054a5132 (diff)
-Added support for deserializing IDictionary properties
-rw-r--r--Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs47
-rw-r--r--Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs4
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)