Merge pull request #1275 from ranma42/fix-lib64
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / XmlSerializationReaderInterpreter.cs
index b1d06576b97f1ab1e88277a0241986971878cc27..1853ad1497615a244b44df1c26ef7fe79b75d621 100644 (file)
@@ -178,7 +178,7 @@ namespace System.Xml.Serialization
                        }
                        else
                        {
-                               if (Reader.LocalName != rootMap.ElementName || Reader.NamespaceURI != rootMap.Namespace)
+                               if (!rootMap.IsAny && (Reader.LocalName != rootMap.ElementName || Reader.NamespaceURI != rootMap.Namespace))
                                        throw CreateUnknownNodeException();
                                
                                return ReadObject (rootMap, rootMap.IsNullable, true);
@@ -585,6 +585,10 @@ namespace System.Xml.Serialization
 
                void SetMemberValue (XmlTypeMapMember member, object ob, object value, bool isValueList)
                {
+                       var memberType = member.TypeData.Type;
+                       if (value != null && !value.GetType().IsAssignableFrom (memberType))
+                               value = XmlSerializationWriterInterpreter.ImplicitConvert (value, memberType);
+
                        if (isValueList)
                                ((object[])ob)[member.GlobalIndex] = value;
                        else
@@ -835,7 +839,7 @@ namespace System.Xml.Serialization
                        Reader.MoveToContent ();
                        if (Reader.NodeType == XmlNodeType.Element)
                        {
-                               if (Reader.LocalName == typeMap.ElementName && Reader.NamespaceURI == typeMap.Namespace)
+                               if (typeMap.IsAny || (Reader.LocalName == typeMap.ElementName && Reader.NamespaceURI == typeMap.Namespace))
                                {
                                        object ob = CreateInstance (typeMap.TypeData.Type, true);
                                        return ReadSerializable ((IXmlSerializable)ob);