remove svn:executable from .cs files
[mono.git] / mcs / class / System.Runtime.Serialization.Formatters.Soap / System.Runtime.Serialization.Formatters.Soap / SoapWriter.cs
old mode 100755 (executable)
new mode 100644 (file)
index 34b648e..6339add
@@ -32,6 +32,7 @@ using System.IO;
 using System.Reflection;\r
 using System.Collections;\r
 using System.Runtime.Remoting;\r
+using System.Runtime.Remoting.Metadata;\r
 using System.Runtime.Remoting.Messaging;\r
 using System.Runtime.Serialization;\r
 using System.Runtime.Serialization.Formatters;\r
@@ -74,12 +75,10 @@ namespace System.Runtime.Serialization.Formatters.Soap {
 \r
                private XmlTextWriter _xmlWriter;\r
                private Queue _objectQueue = new Queue();\r
-               private Hashtable _prefixTable = new Hashtable();\r
                private Hashtable _objectToIdTable = new Hashtable();\r
                private ISurrogateSelector _surrogateSelector;\r
                private SoapTypeMapper _mapper;\r
                private StreamingContext _context;\r
-               private ISoapMessage _soapMessage = null;\r
                private ObjectIDGenerator idGen = new ObjectIDGenerator();\r
                private FormatterAssemblyStyle _assemblyFormat = FormatterAssemblyStyle.Full;\r
                private FormatterTypeStyle _typeFormat = FormatterTypeStyle.TypesWhenNeeded;\r
@@ -103,7 +102,6 @@ namespace System.Runtime.Serialization.Formatters.Soap {
                        _xmlWriter.Formatting = Formatting.Indented;\r
                        _surrogateSelector = selector;\r
                        _context = context;\r
-                       _soapMessage = soapMessage;\r
 \r
                }\r
 \r
@@ -298,7 +296,6 @@ namespace System.Runtime.Serialization.Formatters.Soap {
                        Id(idGen.GetId(message, out firstTime));\r
 \r
                        string[] paramNames = message.ParamNames;\r
-                       Type[] paramTypes = message.ParamTypes;\r
                        object[] paramValues = message.ParamValues;\r
                        int length = (paramNames != null)?paramNames.Length:0;\r
                        for(int i = 0; i < length; i++) \r
@@ -373,25 +370,26 @@ namespace System.Runtime.Serialization.Formatters.Soap {
                                Element element = _mapper[currentType];\r
                                _xmlWriter.WriteStartElement(element.Prefix, element.LocalName, element.NamespaceURI);\r
                                Id(currentObjectId);\r
-                       }\r
-                       if(currentType == typeof(string))\r
+                       }
+\r
+                       if (currentType == typeof(TimeSpan))
+                       {
+                               _xmlWriter.WriteString(SoapTypeMapper.GetXsdValue(currentObject));
+                       }
+                       else if(currentType == typeof(string))\r
                        {\r
                                _xmlWriter.WriteString(currentObject.ToString());\r
                        }\r
                        else\r
                        {\r
-                               MemberInfo[] memberInfos = \r
-                                       FormatterServices.GetSerializableMembers(currentType, _context);\r
-                               object[] objectData =\r
-                                       FormatterServices.GetObjectData(currentObject, memberInfos);\r
-//                             Array.Sort(memberInfos, objectData, this);\r
+                               MemberInfo[] memberInfos = FormatterServices.GetSerializableMembers(currentType, _context);\r
+                               object[] objectData = FormatterServices.GetObjectData(currentObject, memberInfos);\r
+                               \r
                                for(int i = 0; i < memberInfos.Length; i++) \r
                                {\r
-                                       FieldInfo fieldInfo = memberInfos[i] as FieldInfo;\r
-//                                     bool specifyEncoding = false;\r
-//                                     if(objectData[i] != null)\r
-//                                              specifyEncoding = (objectData[i].GetType() != fieldInfo.FieldType);\r
-                                       _xmlWriter.WriteStartElement(fieldInfo.Name);\r
+                                       FieldInfo fieldInfo = (FieldInfo) memberInfos[i];\r
+                                       SoapFieldAttribute at = (SoapFieldAttribute) InternalRemotingServices.GetCachedSoapAttribute (fieldInfo);\r
+                                       _xmlWriter.WriteStartElement (XmlConvert.EncodeLocalName (at.XmlElementName));\r
                                        SerializeComponent(\r
                                                objectData[i], \r
                                                IsEncodingNeeded(objectData[i], fieldInfo.FieldType));\r
@@ -448,6 +446,13 @@ namespace System.Runtime.Serialization.Formatters.Soap {
                        Element xmlArrayType = _mapper[arrayType];\r
                        _xmlWriter.WriteStartElement(element.Prefix, element.LocalName, element.NamespaceURI);\r
                        if(currentArrayId > 0) Id(currentArrayId);\r
+                       \r
+                       if (arrayType == typeof(byte)) {\r
+                               EncodeType (currentArray.GetType());\r
+                               _xmlWriter.WriteString (Convert.ToBase64String ((byte[])currentArray));\r
+                               _xmlWriter.WriteFullEndElement();\r
+                               return;\r
+                       }\r
 \r
                        if(_xmlWriter.LookupPrefix(xmlArrayType.NamespaceURI) == null)\r
                        {\r