Merge pull request #3626 from lateralusX/jlorenss/win-api-family-support-eglib
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / XmlSerializer.cs
index 474e8178375a80385951e8255954865a9c1b5454..60bbc316699e378070fa9628ddd884b9e818f2da 100644 (file)
@@ -37,7 +37,7 @@ using System.Reflection;
 using System.Xml;
 using System.Xml.Schema;
 using System.Text;
-#if !NET_2_1
+#if !MOBILE
 using System.CodeDom;
 using System.CodeDom.Compiler;
 using Microsoft.CSharp;
@@ -121,7 +121,7 @@ namespace System.Xml.Serialization
                        //       debugging pourposes by adding the "nofallback" option.
                        //       For example: MONO_XMLSERIALIZER_THS=0,nofallback
                        
-#if NET_2_1
+#if MOBILE
                        string db = null;
                        string th = null;
                        generationThreshold = -1;
@@ -150,15 +150,22 @@ namespace System.Xml.Serialization
                        }
 #endif
                        deleteTempFiles = (db == null || db == "no");
-#if !NET_2_1
-                       IDictionary table = (IDictionary) ConfigurationSettings.GetConfig("system.diagnostics");
+#if !MOBILE && CONFIGURATION_DEP
+                       // DiagnosticsSection
+                       ConfigurationSection table = (ConfigurationSection) ConfigurationSettings.GetConfig("system.diagnostics");
+                       var bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
                        if (table != null) 
                        {
-                               table = (IDictionary) table["switches"];
-                               if (table != null) 
-                               {
-                                       string val = (string) table ["XmlSerialization.Compilation"];
-                                       if (val == "1") deleteTempFiles = false;
+                               // SwitchElementsCollection
+                               var pi = table.GetType ().GetProperty ("Switches", bf);
+                               var switchesElement = (ConfigurationElementCollection) pi.GetValue (table, null);
+                               foreach (ConfigurationElement e in switchesElement) {
+                                       // SwitchElement
+                                       if (e.GetType ().GetProperty ("Name", bf).GetValue (e, null) as string == "XmlSerialization.Compilation") {
+                                               if (e.GetType ().GetProperty ("Value", bf).GetValue (e, null) as string == "1")
+                                                       deleteTempFiles = false;
+                                               break;
+                                       }
                                }
                        }
 #endif
@@ -197,6 +204,11 @@ namespace System.Xml.Serialization
                {
                }
 
+               public XmlSerializer (Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, string defaultNamespace, string location)
+                       : this (type, overrides, extraTypes, root, defaultNamespace, location, null)
+               {
+               }
+
                public XmlSerializer (Type type, XmlAttributeOverrides overrides)
                        : this (type, overrides, null, null, null)
                {
@@ -232,7 +244,6 @@ namespace System.Xml.Serialization
                        get { return typeMapping; }
                }
 
-#if NET_2_0
 
                [MonoTODO]
                public XmlSerializer (Type type,
@@ -244,7 +255,6 @@ namespace System.Xml.Serialization
                        Evidence evidence)
                {
                }
-#endif
 
 #endregion // Constructors
 
@@ -467,13 +477,8 @@ namespace System.Xml.Serialization
 
                                if (namespaces == null || namespaces.Count == 0) {
                                        namespaces = new XmlSerializerNamespaces ();
-#if NET_2_0
                                        namespaces.Add ("xsi", XmlSchema.InstanceNamespace);
                                        namespaces.Add ("xsd", XmlSchema.Namespace);
-#else
-                                       namespaces.Add ("xsd", XmlSchema.Namespace);
-                                       namespaces.Add ("xsi", XmlSchema.InstanceNamespace);
-#endif
                                }
 
                                xsWriter.Initialize (xmlWriter, namespaces);
@@ -579,7 +584,7 @@ namespace System.Xml.Serialization
                                }
                        }
                        
-#if !NET_2_1
+#if !MOBILE
                        if (!typeMapping.Source.CanBeGenerated || generationThreshold == -1)
                                return new XmlSerializationWriterInterpreter (typeMapping);
 
@@ -600,7 +605,7 @@ namespace System.Xml.Serialization
                
                XmlSerializationReader CreateReader (XmlMapping typeMapping)
                {
-#if !NET_2_1
+#if !MOBILE
                        XmlSerializationReader reader;
                        
                        lock (this) {
@@ -630,7 +635,7 @@ namespace System.Xml.Serialization
                        return new XmlSerializationReaderInterpreter (typeMapping);
                }
                
-#if NET_2_1
+#if MOBILE
                void CheckGeneratedTypes (XmlMapping typeMapping)
                {
                        throw new NotImplementedException();
@@ -769,6 +774,8 @@ namespace System.Xml.Serialization
                                cp.ReferencedAssemblies.Add ("System.Xml");
                        if (!cp.ReferencedAssemblies.Contains ("System.Data"))
                                cp.ReferencedAssemblies.Add ("System.Data");
+                       if (!cp.ReferencedAssemblies.Contains ("System.Web.Services"))
+                               cp.ReferencedAssemblies.Add ("System.Web.Services");
                        
                        CompilerResults res = comp.CompileAssemblyFromFile (cp, file);
                        if (res.Errors.HasErrors || res.CompiledAssembly == null) {
@@ -804,17 +811,10 @@ namespace System.Xml.Serialization
                }
 #endif
                
-#if NET_2_0
                GenerationBatch LoadFromSatelliteAssembly (GenerationBatch batch)
                {
                        return batch;
                }
-#else
-               GenerationBatch LoadFromSatelliteAssembly (GenerationBatch batch)
-               {
-                       return batch;
-               }
-#endif
                
 #endregion // Methods
        }