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

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2014-10-30 23:18:59 +0300
committerMiguel de Icaza <miguel@gnome.org>2014-10-30 23:19:07 +0300
commit6af798962810054fcf68f8e597de56b6490271a2 (patch)
tree7e0bc331b9b3cb3113f8a46709ecf79be3967b61 /mcs/class/System.Web.Extensions
parentf269254917ea7362bf8248e121303b4756ed6834 (diff)
Re-apply the patch, there isa fix for it
Diffstat (limited to 'mcs/class/System.Web.Extensions')
-rw-r--r--mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs7
-rw-r--r--mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs4
-rw-r--r--mcs/class/System.Web.Extensions/Test/System.Web.Script.Serialization/JavaScriptSerializerTest.cs16
3 files changed, 24 insertions, 3 deletions
diff --git a/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs b/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs
index 14a03b2f0dc..6a147e2e03e 100644
--- a/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs
+++ b/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs
@@ -204,7 +204,12 @@ namespace System.Web.Script.Serialization
}
public object Deserialize (string input, Type targetType) {
- return DeserializeObjectInternal (input);
+ object obj = DeserializeObjectInternal (input);
+
+ if (obj == null)
+ return Activator.CreateInstance (targetType);
+
+ return ConvertToType (obj, targetType);
}
static object Evaluate (object value) {
diff --git a/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs b/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs
index 46bef52a7b4..8593e532bf0 100644
--- a/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs
+++ b/mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs
@@ -833,7 +833,7 @@ namespace System.Web.Script.Serialization
void CreateArray ()
{
- var arr = new ArrayList ();
+ var arr = new List <object> ();
PushObject (arr);
}
@@ -865,7 +865,7 @@ namespace System.Web.Script.Serialization
{
Dictionary <string, object> dict = PeekObject () as Dictionary <string, object>;
if (dict == null) {
- ArrayList arr = PeekObject () as ArrayList;
+ List <object> arr = PeekObject () as List <object>;
if (arr == null)
throw new InvalidOperationException ("Internal error: current object is not a dictionary or an array.");
arr.Add (o);
diff --git a/mcs/class/System.Web.Extensions/Test/System.Web.Script.Serialization/JavaScriptSerializerTest.cs b/mcs/class/System.Web.Extensions/Test/System.Web.Script.Serialization/JavaScriptSerializerTest.cs
index 995590eeb2e..8274ef9c3f8 100644
--- a/mcs/class/System.Web.Extensions/Test/System.Web.Script.Serialization/JavaScriptSerializerTest.cs
+++ b/mcs/class/System.Web.Extensions/Test/System.Web.Script.Serialization/JavaScriptSerializerTest.cs
@@ -416,6 +416,22 @@ namespace MonoTests.System.Web.Script.Serialization
}
[Test]
+ public void TestDeserializeNonGenericOverload()
+ {
+ JavaScriptSerializer ser = new JavaScriptSerializer();
+ Assert.IsNull(ser.Deserialize("", typeof(X)));
+
+ X s = new X();
+ s.Init();
+ string x = ser.Serialize(s);
+
+ Assert.AreEqual("{\"z\":8,\"ch\":\"v\",\"ch_null\":null,\"str\":\"vwF59g\",\"b\":253,\"sb\":-48,\"sh\":-32740,\"ush\":65511,\"i\":-234235453,\"ui\":4294733061,\"l\":-9223372036854775780,\"ul\":18446744073709551612,\"f\":NaN,\"f1\":-Infinity,\"f2\":Infinity,\"f3\":-3.40282347E+38,\"f4\":3.40282347E+38,\"d\":NaN,\"d1\":-Infinity,\"d2\":Infinity,\"d3\":-1.7976931348623157E+308,\"d4\":1.7976931348623157E+308,\"de\":-1,\"de1\":0,\"de2\":1,\"de3\":-79228162514264337593543950335,\"de4\":79228162514264337593543950335,\"g\":\"000000ea-0002-0162-0102-030405060708\",\"nb\":null,\"dbn\":null,\"uri\":\"http://kostat@mainsoft/adfasdf/asdfasdf.aspx/asda/ads?a=b&c=d\",\"hash\":{\"mykey\":{\"BB\":10}},\"point\":{\"IsEmpty\":false,\"X\":150,\"Y\":150},\"MyEnum\":[1,10,345],\"MyEnum1\":[1,10,345],\"AA\":5,\"AA1\":[{\"BB\":10},{\"BB\":10}],\"BB\":18446744073709551610,\"YY\":[{\"BB\":10},{\"BB\":10}]}", x, "#A1");
+
+ X n = ser.Deserialize(x, typeof(X)) as X;
+ Assert.AreEqual(s, n, "#A2");
+ }
+
+ [Test]
public void TestDeserializeTypeResolver ()
{
#if NET_4_5