diff options
author | Miguel de Icaza <miguel@gnome.org> | 2014-10-30 23:18:59 +0300 |
---|---|---|
committer | Miguel de Icaza <miguel@gnome.org> | 2014-10-30 23:19:07 +0300 |
commit | 6af798962810054fcf68f8e597de56b6490271a2 (patch) | |
tree | 7e0bc331b9b3cb3113f8a46709ecf79be3967b61 /mcs/class/System.Web.Extensions | |
parent | f269254917ea7362bf8248e121303b4756ed6834 (diff) |
Re-apply the patch, there isa fix for it
Diffstat (limited to 'mcs/class/System.Web.Extensions')
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\":\"vwF59g\",\"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 |