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
\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
_xmlWriter.Formatting = Formatting.Indented;\r
_surrogateSelector = selector;\r
_context = context;\r
- _soapMessage = soapMessage;\r
\r
}\r
\r
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
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
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