Merge pull request #3927 from tritao/updated_offsets_tool
authorJoão Matos <joao@tritao.eu>
Thu, 10 Nov 2016 18:55:51 +0000 (18:55 +0000)
committerGitHub <noreply@github.com>
Thu, 10 Nov 2016 18:55:51 +0000 (18:55 +0000)
Updated offsets tool to latest CppSharp.

mcs/class/System.XML/System.Xml.Serialization/TypeData.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTests.cs
mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs

index f32bb39e09182b6d88559c0758c6af511e14cddc..55de52a77844e4a891fafbbc60cafa9476b45199 100644 (file)
@@ -135,10 +135,16 @@ namespace System.Xml.Serialization
 
                void LookupTypeConvertor ()
                {
-                       // We only need this for System.Xml.Linq.
-                       var convertor = type.GetCustomAttribute<XmlTypeConvertorAttribute> ();
-                       if (convertor != null)
-                               typeConvertor = type.GetMethod (convertor.Method, BindingFlags.Static | BindingFlags.NonPublic);
+                       // We only need this for System.Xml.Linq
+                       var t = type;
+                       // HACK: because interpreter array handling is so bad
+                       if (t.IsArray)
+                               t = t.GetElementType ();
+
+                       var convertor = t.GetCustomAttribute<XmlTypeConvertorAttribute> ();
+                       if (convertor != null) {
+                               typeConvertor = t.GetMethod (convertor.Method, BindingFlags.Static | BindingFlags.NonPublic);
+                       }
                }
 
                internal void ConvertForAssignment (ref object value)
index 5d9e4b24f341cd6a2054bb8d1ab9aea3d18342e5..d03dea1ff01228e237db86dfc4a9a7028f2da73e 100644 (file)
@@ -737,7 +737,8 @@ namespace System.Xml.Serialization
                        Type type = listType.Type;
                        if (type.IsArray)
                        {
-                               list = EnsureArrayIndex ((Array)list, index, type.GetElementType());
+                               list = EnsureArrayIndex ((Array)list, index, type.GetElementType ());
+                               listType.ConvertForAssignment (ref value);
                                ((Array)list).SetValue (value, index);
                        }
                        else    // Must be IEnumerable
index 24c8f106523b44cf958527f49371d9414ba3d042..61835e709a09541daa56c89b501efc256c0ba3c1 100644 (file)
@@ -161,14 +161,12 @@ namespace MonoTests.System.XmlSerialization
                }
 
                // test constructors
-#if USE_VERSION_1_1    // It doesn't pass on MS.NET 1.1.
                [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
                public void TestConstructor()
                {
                        XmlSerializer ser = new XmlSerializer (null, "");
                }
-#else
-#endif
 
                // test basic types ////////////////////////////////////////////////////////
                [Test]
index 5415ff8e50a4beb760cc5825406fd6e49e7a3989..f93bbabc3d88e21bca92fc48e741c150f261a945 100644 (file)
@@ -2099,6 +2099,27 @@ namespace MonoTests.System.Xml.Linq
                        Assert.AreEqual (xe.Content.ToString (), "<Data />", "#3");
                }
 
+               [XmlType ("Root")]
+               public class DeserializeXElementArray_Data
+               {
+                       [XmlAnyElement]
+                       public XElement[] Content;
+               }
+
+               [Test]
+               public void DeserializeXElementArray ()
+               {
+                       var xmlString = "<Root><Data /></Root>";
+
+                       var serializer = new XmlSerializer (typeof (DeserializeXElementArray_Data));
+                       var res = serializer.Deserialize (new StringReader (xmlString));
+
+                       Assert.IsNotNull (res, "#1");
+                       Assert.AreEqual (typeof (DeserializeXElementArray_Data), res.GetType (), "#2");
+                       var xe = (DeserializeXElementArray_Data)res;
+                       Assert.AreEqual (xe.Content [0].ToString (), "<Data />", "#3");
+               }
+
                [Test] // Bug #20151
                public void XElementFromArrayWithNullValuesAsObject ()
                {