We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- namespace System.Runtime.Serialization.Formatters.Soap
- {
- using System;
- using System.Runtime.Serialization.Formatters;
- using System.Collections;
- using System.Collections.Generic;
- using System.Reflection;
- using System.IO;
- using System.Globalization;
- using System.Text;
- using System.Diagnostics;
- using System.Runtime.Remoting;
- using System.Runtime.Remoting.Metadata.W3cXsd2001;
-
-
-
-
- internal sealed class SoapWriter
- {
-
-
-
-
-
- private static string _soapStartStr = "<SOAP-ENV:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " + "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "xmlns:clr=\"http://schemas.microsoft.com/soap/encoding/clr/1.0\" " + "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"";
-
- private static string _soapStart1999Str = "<SOAP-ENV:Envelope xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\" " + "xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\" " + "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " + "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"";
-
- private static string _soapStart2000Str = "<SOAP-ENV:Envelope xmlns:xsi=\"http://www.w3.org/2000/10/XMLSchema-instance\" " + "xmlns:xsd=\"http://www.w3.org/2000/10/XMLSchema\" " + "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " + "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"";
-
- private static byte[] _soapStart = Encoding.UTF8.GetBytes(_soapStartStr);
- private static byte[] _soapStart1999 = Encoding.UTF8.GetBytes(_soapStart1999Str);
- private static byte[] _soapStart2000 = Encoding.UTF8.GetBytes(_soapStart2000Str);
- public static Dictionary<char, string> encodingTable = new Dictionary<char, string>();
-
- static SoapWriter()
- {
-
-
-
- encodingTable.Add('&', "&");
- encodingTable.Add('"', """);
- encodingTable.Add('\'', "'");
- encodingTable.Add('<', "<");
- encodingTable.Add('>', ">");
- encodingTable.Add(Char.MinValue, "�");
- encodingTable.Add('\v', "");
- encodingTable.Add('\f', "");
-
- for (int i = 1; i < 9; i++)
- encodingTable.Add(((IConvertible)i).ToChar(NumberFormatInfo.InvariantInfo), "&#x" + i.ToString("X", CultureInfo.InvariantCulture) + ";");
- for (int i = 14; i < 32; i++)
- encodingTable.Add(((IConvertible)i).ToChar(NumberFormatInfo.InvariantInfo), "&#x" + i.ToString("X", CultureInfo.InvariantCulture) + ";");
- for (int i = 127; i < 133; i++)
- encodingTable.Add(((IConvertible)i).ToChar(NumberFormatInfo.InvariantInfo), "&#x" + i.ToString("X", CultureInfo.InvariantCulture) + ";");
- for (int i = 134; i < 160; i++)
- encodingTable.Add(((IConvertible)i).ToChar(NumberFormatInfo.InvariantInfo), "&#x" + i.ToString("X", CultureInfo.InvariantCulture) + ";");
-
- }
-
- private AttributeList attrList = new AttributeList();
- private AttributeList attrValueList = new AttributeList();
-
- const int StringBuilderSize = 1024;
-
-
-
- private int lineIndent = 4;
- private int instanceIndent = 1;
-
-
- private StringBuilder stringBuffer = new StringBuilder(120);
- private StringBuilder sb = new StringBuilder(120);
-
- private int topId;
- private int headerId;
-
-
- Hashtable assemblyInfos = new Hashtable(10);
- StreamWriter writer;
- Stream stream;
-
-
- Hashtable typeNameToDottedInfoTable = null;
- Hashtable dottedAssemToAssemIdTable = null;
- Hashtable assemblyInfoUsed = new Hashtable(10);
-
- int dottedAssemId = 1;
-
- internal bool isUsedEnc = false;
- XsdVersion xsdVersion = XsdVersion.V2001;
-
- internal struct DottedInfo
- {
- internal string dottedAssemblyName;
- internal string name;
- internal string nameSpace;
- internal int assemId;
- }
-
-
- internal SoapWriter(Stream stream)
- {
- this.stream = stream;
- UTF8Encoding enc = new UTF8Encoding(false, true);
- this.writer = new StreamWriter(stream, enc, StringBuilderSize);
-
- typeNameToDottedInfoTable = new Hashtable(20);
- dottedAssemToAssemIdTable = new Hashtable(20);
- }
-
-
-
-
- [Conditional("_DEBUG")]
- private void EmitIndent(int count)
- {
- while (--count >= 0) {
- for (int i = 0; i < lineIndent; i++) {
- TraceSoap(" ");
- writer.Write(' ');
- }
- }
- }
-
-
- [Conditional("_DEBUG")]
- private void EmitLine(int indent, string value)
- {
- InternalST.Soap(this, "EmitLine: ", value);
- EmitIndent(indent);
- writer.Write(value);
- EmitLine();
- }
-
-
- private void EmitLine()
- {
- WriteTraceSoap();
- writer.Write("\r\n");
- }
-
-
-
- private string Escape(string value)
- {
- stringBuffer.Length = 0;
- foreach (char c in value) {
- if (encodingTable.ContainsKey(c))
- stringBuffer.Append(encodingTable[c]);
- else
- stringBuffer.Append(c);
- }
-
- string returnValue = null;
-
- if (stringBuffer.Length > 0)
- returnValue = stringBuffer.ToString();
- else
- returnValue = value;
-
- return returnValue;
- }
-
-
-
-
-
- NameCache nameCache = new NameCache();
- private string NameEscape(string name)
- {
- string value = (string)nameCache.GetCachedValue(name);
- if (value == null) {
- value = System.Xml.XmlConvert.EncodeName(name);
- nameCache.SetCachedValue(value);
- }
- return value;
- }
-
-
-
- internal void Reset()
- {
- writer = null;
- stringBuffer = null;
- }
-
- internal void InternalWrite(string s)
- {
- TraceSoap(s);
- writer.Write(s);
- }
-
- StringBuilder traceBuffer = null;
- [Conditional("_LOGGING")]
- internal void TraceSoap(string s)
- {
- if (traceBuffer == null)
- traceBuffer = new StringBuilder();
- traceBuffer.Append(s);
- }
-
- [Conditional("_LOGGING")]
- internal void WriteTraceSoap()
- {
- InternalST.InfoSoap(traceBuffer.ToString());
- traceBuffer.Length = 0;
- }
-
-
- internal void Write(InternalElementTypeE use, string name, AttributeList attrList, string value, bool isNameEscape, bool isValueEscape)
- {
- InternalST.Soap(this, "Write ", ((Enum)use).ToString(), ", name " + name + ", value ", value, " isNameEscape ", isNameEscape, " isValueEscape ", isValueEscape);
-
- string elementName = name;
- if (isNameEscape)
- elementName = NameEscape(name);
-
- if (use == InternalElementTypeE.ObjectEnd)
- instanceIndent--;
-
- EmitIndent(instanceIndent);
-
- InternalWrite("<");
- if (use == InternalElementTypeE.ObjectEnd)
- InternalWrite("/");
- InternalWrite(elementName);
-
- WriteAttributeList(attrList);
-
- switch (use) {
- case InternalElementTypeE.ObjectBegin:
- InternalWrite(">");
- instanceIndent++;
- break;
- case InternalElementTypeE.ObjectEnd:
- InternalWrite(">");
- break;
- case InternalElementTypeE.Member:
- if (value == null)
- InternalWrite("/>");
- else {
- InternalWrite(">");
- if (isValueEscape)
- InternalWrite(Escape(value));
- else
- InternalWrite(value);
- InternalWrite("</");
- InternalWrite(elementName);
- InternalWrite(">");
- }
- break;
- default:
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_UseCode"), ((Enum)use).ToString()));
- break;
- }
- EmitLine();
- }
-
-
- void WriteAttributeList(AttributeList attrList)
- {
- for (int i = 0; i < attrList.Count; i++) {
- string aName;
- string aValue;
- attrList.Get(i, out aName, out aValue);
- InternalWrite(" ");
- InternalWrite(aName);
- InternalWrite("=");
- InternalWrite("\"");
-
- InternalWrite(aValue);
- InternalWrite("\"");
- }
- }
-
-
-
- internal void WriteBegin()
- {
- InternalST.InfoSoap("******************** Start Serialized Stream *****************");
- }
-
-
- internal void WriteEnd()
- {
- writer.Flush();
- InternalST.InfoSoap("******************** End Serialized Stream *******************");
- Reset();
- }
-
- internal void WriteXsdVersion(XsdVersion xsdVersion)
- {
- this.xsdVersion = xsdVersion;
- }
-
-
- internal void WriteObjectEnd(NameInfo memberNameInfo, NameInfo typeNameInfo)
- {
-
-
- attrList.Clear();
- Write(InternalElementTypeE.ObjectEnd, MemberElementName(memberNameInfo, typeNameInfo), attrList, null, true, false);
- assemblyInfoUsed.Clear();
- }
-
- internal void WriteSerializationHeaderEnd()
- {
- attrList.Clear();
- Write(InternalElementTypeE.ObjectEnd, "SOAP-ENV:Body", attrList, null, false, false);
- Write(InternalElementTypeE.ObjectEnd, "SOAP-ENV:Envelope", attrList, null, false, false);
- writer.Flush();
- }
-
- internal void WriteHeaderArrayEnd()
- {
-
-
- }
-
- internal void WriteHeaderSectionEnd()
- {
- attrList.Clear();
- Write(InternalElementTypeE.ObjectEnd, "SOAP-ENV:Header", attrList, null, false, false);
- }
-
-
- internal void WriteSerializationHeader(int topId, int headerId, int minorVersion, int majorVersion)
- {
- InternalST.Soap(this, "WriteSerializationHeader");
- this.topId = topId;
- this.headerId = headerId;
-
-
- switch (xsdVersion) {
- case XsdVersion.V1999:
- InternalST.InfoSoap(_soapStart1999Str, ">");
- stream.Write(_soapStart1999, 0, _soapStart1999.Length);
- break;
- case XsdVersion.V2000:
- InternalST.InfoSoap(_soapStart2000Str, ">");
- stream.Write(_soapStart1999, 0, _soapStart2000.Length);
- break;
- case XsdVersion.V2001:
- InternalST.InfoSoap(_soapStartStr, ">");
- stream.Write(_soapStart, 0, _soapStart.Length);
- break;
- }
- writer.Write(">\r\n");
- }
-
-
- internal void WriteObject(NameInfo nameInfo, NameInfo typeNameInfo, int numMembers, string[] memberNames, Type[] memberTypes, WriteObjectInfo[] objectInfos)
- {
- nameInfo.Dump("WriteObject nameInfo");
- typeNameInfo.Dump("WriteObject typeNameInfo");
-
- int objectId = (int)nameInfo.NIobjectId;
- attrList.Clear();
- if (objectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
-
-
- if (objectId > 0)
- attrList.Put("id", IdToString((int)nameInfo.NIobjectId));
-
- if (((nameInfo.NItransmitTypeOnObject || nameInfo.NItransmitTypeOnMember) && (nameInfo.NIisNestedObject || nameInfo.NIisArrayItem)))
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- if (nameInfo.NIisMustUnderstand) {
- attrList.Put("SOAP-ENV:mustUnderstand", "1");
- isUsedEnc = true;
- }
- if (nameInfo.NIisHeader) {
- attrList.Put("xmlns:" + nameInfo.NIheaderPrefix, nameInfo.NInamespace);
- attrList.Put("SOAP-ENC:root", "1");
- }
-
- if (attrValueList.Count > 0) {
-
- for (int i = 0; i < attrValueList.Count; i++) {
- string aName;
- string aValue;
- attrValueList.Get(i, out aName, out aValue);
- attrList.Put(aName, aValue);
- }
- attrValueList.Clear();
- }
-
- string memberName = MemberElementName(nameInfo, typeNameInfo);
- NamespaceAttribute();
- Write(InternalElementTypeE.ObjectBegin, memberName, attrList, null, true, false);
- }
-
- internal void WriteAttributeValue(NameInfo memberNameInfo, NameInfo typeNameInfo, object value)
- {
-
- InternalST.Soap(this, "WriteAttributeValues ", value);
- string stringValue = null;
- if (value is string)
- stringValue = (string)value;
- else
- stringValue = Converter.SoapToString(value, typeNameInfo.NIprimitiveTypeEnum);
- attrValueList.Put(MemberElementName(memberNameInfo, typeNameInfo), stringValue);
- }
-
- internal void WriteObjectString(NameInfo nameInfo, string value)
- {
- InternalST.Soap(this, "WriteObjectString value ", value);
- nameInfo.Dump("WriteObjectString nameInfo");
- attrList.Clear();
- if (nameInfo.NIobjectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
-
-
- if (nameInfo.NIobjectId > 0) {
- attrList.Put("id", IdToString((int)nameInfo.NIobjectId));
- }
-
- string stringType = null;
- if (nameInfo.NIobjectId > 0) {
- stringType = "SOAP-ENC:string";
- isUsedEnc = true;
- }
- else
- stringType = "xsd:string";
-
- Write(InternalElementTypeE.Member, stringType, attrList, value, false, Converter.IsEscaped(nameInfo.NIprimitiveTypeEnum));
- }
-
- internal void WriteTopPrimitive(NameInfo nameInfo, object value)
- {
- nameInfo.Dump("WriteMember memberNameInfo");
-
- attrList.Clear();
-
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
-
- if (nameInfo.NIobjectId > 0) {
- attrList.Put("id", IdToString((int)nameInfo.NIobjectId));
- }
-
- string stringValue = null;
- if (value is string)
- stringValue = (string)value;
- else
- stringValue = Converter.SoapToString(value, nameInfo.NIprimitiveTypeEnum);
-
- Write(InternalElementTypeE.Member, "xsd:" + (Converter.ToXmlDataType(nameInfo.NIprimitiveTypeEnum)), attrList, stringValue, true, false);
- }
-
-
-
- internal void WriteObjectByteArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, int length, int lowerBound, byte[] byteA)
- {
- memberNameInfo.Dump("WriteObjectByteArray memberNameInfo");
- arrayNameInfo.Dump("WriteObjectByteArray arrayNameInfo");
- arrayElemTypeNameInfo.Dump("WriteObjectByteArray arrayElemTypeNameInfo");
-
- string byteString = Convert.ToBase64String(byteA);
- attrList.Clear();
- if (memberNameInfo.NIobjectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
- if (arrayNameInfo.NIobjectId > 1)
- attrList.Put("id", IdToString((int)arrayNameInfo.NIobjectId));
- attrList.Put("xsi:type", "SOAP-ENC:base64");
- isUsedEnc = true;
- string memberName = MemberElementName(memberNameInfo, null);
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, memberName, attrList, byteString, true, false);
- }
-
-
- internal void WriteMember(NameInfo memberNameInfo, NameInfo typeNameInfo, object value)
- {
- memberNameInfo.Dump("WriteMember memberNameInfo");
- typeNameInfo.Dump("WriteMember typeNameInfo");
-
- attrList.Clear();
- if ((typeNameInfo.NItype != null) && (memberNameInfo.NItransmitTypeOnMember || (memberNameInfo.NItransmitTypeOnObject && !memberNameInfo.NIisArrayItem))) {
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- }
-
- string stringValue = null;
- if (value != null) {
- if (typeNameInfo.NIprimitiveTypeEnum == InternalPrimitiveTypeE.QName) {
- SoapQName soapQName = (SoapQName)value;
- if (soapQName.Key == null || soapQName.Key.Length == 0)
- attrList.Put("xmlns", "");
- else
- attrList.Put("xmlns:" + soapQName.Key, soapQName.Namespace);
-
- stringValue = soapQName.ToString();
- }
- else {
-
- if (value is string)
- stringValue = (string)value;
- else
- stringValue = Converter.SoapToString(value, typeNameInfo.NIprimitiveTypeEnum);
- }
- }
-
- NameInfo tempNameInfo = null;
-
-
- if (typeNameInfo.NInameSpaceEnum == InternalNameSpaceE.Interop)
- tempNameInfo = typeNameInfo;
-
- string memberName = MemberElementName(memberNameInfo, tempNameInfo);
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, memberName, attrList, stringValue, true, Converter.IsEscaped(typeNameInfo.NIprimitiveTypeEnum));
- }
-
-
-
- internal void WriteNullMember(NameInfo memberNameInfo, NameInfo typeNameInfo)
- {
- memberNameInfo.Dump("WriteNullMember memberNameInfo");
- typeNameInfo.Dump("WriteNullMember typeNameInfo");
-
- attrList.Clear();
- if ((typeNameInfo.NItype != null) && (memberNameInfo.NItransmitTypeOnMember || (memberNameInfo.NItransmitTypeOnObject && !memberNameInfo.NIisArrayItem))) {
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- }
- attrList.Put("xsi:null", "1");
-
-
-
-
- string memberName = MemberElementName(memberNameInfo, null);
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, memberName, attrList, null, true, false);
- }
-
-
- internal void WriteMemberObjectRef(NameInfo memberNameInfo, NameInfo typeNameInfo, int idRef)
- {
- memberNameInfo.Dump("WriteMemberObjectRef memberNameInfo");
- attrList.Clear();
- attrList.Put("href", RefToString(idRef));
- NameInfo tempNameInfo = null;
-
-
- if (typeNameInfo.NInameSpaceEnum == InternalNameSpaceE.Interop)
- tempNameInfo = typeNameInfo;
- string memberName = MemberElementName(memberNameInfo, tempNameInfo);
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, memberName, attrList, null, true, false);
- }
-
- internal void WriteMemberNested(NameInfo memberNameInfo)
- {
-
- }
-
-
- internal void WriteMemberString(NameInfo memberNameInfo, NameInfo typeNameInfo, string value)
- {
- memberNameInfo.Dump("WriteMemberString memberNameInfo");
- typeNameInfo.Dump("WriteMemberString typeNameInfo");
-
- InternalST.Soap(this, "WriteMemberString memberName ", memberNameInfo.NIname, " objectId ", typeNameInfo.NIobjectId, " value ", value);
- int objectId = (int)typeNameInfo.NIobjectId;
- attrList.Clear();
- if (objectId > 0)
- attrList.Put("id", IdToString((int)typeNameInfo.NIobjectId));
- if ((typeNameInfo.NItype != null) && (memberNameInfo.NItransmitTypeOnMember || (memberNameInfo.NItransmitTypeOnObject && !memberNameInfo.NIisArrayItem))) {
- if (typeNameInfo.NIobjectId > 0) {
- attrList.Put("xsi:type", "SOAP-ENC:string");
- isUsedEnc = true;
- }
- else
- attrList.Put("xsi:type", "xsd:string");
- }
-
- NameInfo tempNameInfo = null;
-
-
- if (typeNameInfo.NInameSpaceEnum == InternalNameSpaceE.Interop)
- tempNameInfo = typeNameInfo;
-
- string memberName = MemberElementName(memberNameInfo, tempNameInfo);
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, memberName, attrList, value, true, Converter.IsEscaped(typeNameInfo.NIprimitiveTypeEnum));
- }
-
- internal void WriteSingleArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, int length, int lowerBound, Array array)
- {
- memberNameInfo.Dump("WriteSingleArray memberNameInfo");
- arrayNameInfo.Dump("WriteSingleArray arrayNameInfo");
- arrayElemTypeNameInfo.Dump("WriteSingleArray arrayElemTypeNameInfo");
-
- attrList.Clear();
- if (memberNameInfo.NIobjectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
- if (arrayNameInfo.NIobjectId > 1)
- attrList.Put("id", IdToString((int)arrayNameInfo.NIobjectId));
- arrayElemTypeNameInfo.NIitemName = NameTagResolver(arrayElemTypeNameInfo, true);
- attrList.Put("SOAP-ENC:arrayType", NameTagResolver(arrayNameInfo, true, memberNameInfo.NIname));
- isUsedEnc = true;
- if (lowerBound != 0)
- attrList.Put("SOAP-ENC:offset", "[" + lowerBound + "]");
- string memberName = MemberElementName(memberNameInfo, null);
- NamespaceAttribute();
- Write(InternalElementTypeE.ObjectBegin, memberName, attrList, null, false, false);
- }
-
- internal void WriteJaggedArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, int length, int lowerBound)
- {
- memberNameInfo.Dump("WriteJaggedArray memberNameInfo");
- arrayNameInfo.Dump("WriteJaggedArray arrayNameInfo");
- arrayElemTypeNameInfo.Dump("WriteJaggedArray arrayElemTypeNameInfo");
-
- attrList.Clear();
- if (memberNameInfo.NIobjectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
- if (arrayNameInfo.NIobjectId > 1)
- attrList.Put("id", IdToString((int)arrayNameInfo.NIobjectId));
- arrayElemTypeNameInfo.NIitemName = "SOAP-ENC:Array";
- isUsedEnc = true;
- attrList.Put("SOAP-ENC:arrayType", TypeArrayNameTagResolver(memberNameInfo, arrayNameInfo, true));
- if (lowerBound != 0)
- attrList.Put("SOAP-ENC:offset", "[" + lowerBound + "]");
- string memberName = MemberElementName(memberNameInfo, null);
- NamespaceAttribute();
- Write(InternalElementTypeE.ObjectBegin, memberName, attrList, null, false, false);
- }
-
-
- private StringBuilder sbOffset = new StringBuilder(10);
-
- internal void WriteRectangleArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, int rank, int[] lengthA, int[] lowerBoundA)
- {
- memberNameInfo.Dump("WriteRectangleArray memberNameInfo");
- arrayNameInfo.Dump("WriteRectangleArray arrayNameInfo");
- arrayElemTypeNameInfo.Dump("WriteRectangleArray arrayElemTypeNameInfo");
-
- sbOffset.Length = 0;
- sbOffset.Append("[");
- bool isZero = true;
- for (int i = 0; i < rank; i++) {
- if (lowerBoundA[i] != 0)
- isZero = false;
- if (i > 0)
- sbOffset.Append(",");
- sbOffset.Append(lowerBoundA[i]);
- }
- sbOffset.Append("]");
-
- attrList.Clear();
- if (memberNameInfo.NIobjectId == topId)
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Body", attrList, null, false, false);
- if (arrayNameInfo.NIobjectId > 1)
- attrList.Put("id", IdToString((int)arrayNameInfo.NIobjectId));
- arrayElemTypeNameInfo.NIitemName = NameTagResolver(arrayElemTypeNameInfo, true);
- attrList.Put("SOAP-ENC:arrayType", TypeArrayNameTagResolver(memberNameInfo, arrayNameInfo, true));
- isUsedEnc = true;
- if (!isZero)
- attrList.Put("SOAP-ENC:offset", sbOffset.ToString());
- string memberName = MemberElementName(memberNameInfo, null);
- NamespaceAttribute();
- Write(InternalElementTypeE.ObjectBegin, memberName, attrList, null, false, false);
- }
-
-
- internal void WriteItem(NameInfo itemNameInfo, NameInfo typeNameInfo, object value)
- {
- itemNameInfo.Dump("WriteItem itemNameInfo");
- typeNameInfo.Dump("WriteItem typeNameInfo");
-
- attrList.Clear();
- if (itemNameInfo.NItransmitTypeOnMember) {
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- }
-
- string stringValue = null;
-
- if (typeNameInfo.NIprimitiveTypeEnum == InternalPrimitiveTypeE.QName) {
- if (value != null) {
- SoapQName soapQName = (SoapQName)value;
- if (soapQName.Key == null || soapQName.Key.Length == 0)
- attrList.Put("xmlns", "");
- else
- attrList.Put("xmlns:" + soapQName.Key, soapQName.Namespace);
-
- stringValue = soapQName.ToString();
- }
- }
- else
- stringValue = Converter.SoapToString(value, typeNameInfo.NIprimitiveTypeEnum);
-
-
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, "item", attrList, stringValue, false, (typeNameInfo.NIprimitiveTypeEnum == InternalPrimitiveTypeE.Invalid));
- }
-
- internal void WriteNullItem(NameInfo memberNameInfo, NameInfo typeNameInfo)
- {
- memberNameInfo.Dump("WriteNullItem memberNameInfo");
- typeNameInfo.Dump("WriteNullItem typeNameInfo");
-
- string typeName = typeNameInfo.NIname;
- attrList.Clear();
- if (typeNameInfo.NItransmitTypeOnMember && !((typeName.Equals("System.Object")) || (typeName.Equals("Object")) || (typeName.Equals("System.Empty") || (typeName.Equals("ur-type")) || (typeName.Equals("anyType")))))
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
-
- attrList.Put("xsi:null", "1");
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, "item", attrList, null, false, false);
- }
-
-
-
- internal void WriteItemObjectRef(NameInfo itemNameInfo, int arrayId)
- {
- itemNameInfo.Dump("WriteItemObjectRef itemNameInfo");
- attrList.Clear();
- attrList.Put("href", RefToString(arrayId));
- Write(InternalElementTypeE.Member, "item", attrList, null, false, false);
- }
-
-
- internal void WriteItemString(NameInfo itemNameInfo, NameInfo typeNameInfo, string value)
- {
- itemNameInfo.Dump("WriteItemString itemNameInfo");
- typeNameInfo.Dump("WriteItemString typeNameInfo");
-
- attrList.Clear();
-
- if (typeNameInfo.NIobjectId > 0) {
- attrList.Put("id", IdToString((int)typeNameInfo.NIobjectId));
- }
- if (itemNameInfo.NItransmitTypeOnMember) {
- if (typeNameInfo.NItype == SoapUtil.typeofString) {
- if (typeNameInfo.NIobjectId > 0) {
- attrList.Put("xsi:type", "SOAP-ENC:string");
- isUsedEnc = true;
- }
- else
- attrList.Put("xsi:type", "xsd:string");
- }
- else
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- }
-
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, "item", attrList, value, false, Converter.IsEscaped(typeNameInfo.NIprimitiveTypeEnum));
- }
-
- internal void WriteHeader(int objectId, int numMembers)
- {
- attrList.Clear();
- Write(InternalElementTypeE.ObjectBegin, "SOAP-ENV:Header", attrList, null, false, false);
-
- }
-
-
-
- internal void WriteHeaderEntry(NameInfo nameInfo, NameInfo typeNameInfo, object value)
- {
- nameInfo.Dump("WriteHeaderEntry nameInfo");
- if (typeNameInfo != null) {
- typeNameInfo.Dump("WriteHeaderEntry typeNameInfo");
- }
-
- attrList.Clear();
- if (value == null)
- attrList.Put("xsi:null", "1");
- else
- attrList.Put("xsi:type", TypeNameTagResolver(typeNameInfo, true));
- if (nameInfo.NIisMustUnderstand) {
- attrList.Put("SOAP-ENV:mustUnderstand", "1");
- isUsedEnc = true;
- }
-
- attrList.Put("xmlns:" + nameInfo.NIheaderPrefix, nameInfo.NInamespace);
- attrList.Put("SOAP-ENC:root", "1");
- string stringValue = null;
-
- if (value != null) {
- if (typeNameInfo != null && typeNameInfo.NIprimitiveTypeEnum == InternalPrimitiveTypeE.QName) {
- SoapQName soapQName = (SoapQName)value;
- if (soapQName.Key == null || soapQName.Key.Length == 0)
- attrList.Put("xmlns", "");
- else
- attrList.Put("xmlns:" + soapQName.Key, soapQName.Namespace);
-
- stringValue = soapQName.ToString();
- }
- else
- stringValue = Converter.SoapToString(value, typeNameInfo.NIprimitiveTypeEnum);
- }
-
- NamespaceAttribute();
- Write(InternalElementTypeE.Member, nameInfo.NIheaderPrefix + ":" + nameInfo.NIname, attrList, stringValue, true, true);
- }
-
-
- internal void WriteHeaderObjectRef(NameInfo nameInfo)
- {
- nameInfo.Dump("WriteHeaderObjectRef nameInfo");
-
- attrList.Clear();
- attrList.Put("href", RefToString((int)nameInfo.NIobjectId));
- if (nameInfo.NIisMustUnderstand) {
- attrList.Put("SOAP-ENV:mustUnderstand", "1");
- isUsedEnc = true;
- }
- attrList.Put("xmlns:" + nameInfo.NIheaderPrefix, nameInfo.NInamespace);
- attrList.Put("SOAP-ENC:root", "1");
- Write(InternalElementTypeE.Member, nameInfo.NIheaderPrefix + ":" + nameInfo.NIname, attrList, null, true, true);
- }
-
-
- internal void WriteHeaderString(