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!
-
Expand
Microsoft.Win32
-
Expand
Microsoft.Win32.SafeHandles
-
Expand
System
-
Expand
System.Runtime.Hosting
-
Expand
System.Runtime.InteropServices
-
Expand
System.Runtime.CompilerServices
-
Expand
System.Collections
-
Expand
System.Collections.Generic
-
Expand
System.Collections.ObjectModel
-
Expand
System.Configuration.Assemblies
-
Expand
System.Diagnostics
-
Expand
System.Diagnostics.CodeAnalysis
-
Expand
System.Diagnostics.SymbolStore
-
Expand
System.Globalization
-
Expand
System.IO
-
Expand
System.IO.IsolatedStorage
-
Expand
System.Reflection
-
Expand
System.Reflection.Cache
-
Expand
System.Reflection.Emit
-
Expand
System.Resources
-
Expand
System.Runtime
-
Expand
System.Runtime.InteropServices.Expando
-
Expand
System.Runtime.ConstrainedExecution
-
Expand
System.Runtime.Remoting.Activation
-
Expand
System.Runtime.Remoting.Messaging
-
Expand
System.Runtime.Remoting.Channels
-
Expand
System.Runtime.Remoting.Lifetime
-
Expand
System.Runtime.Remoting
-
Expand
System.Runtime.Remoting.Contexts
-
Expand
System.Runtime.Remoting.Proxies
-
Expand
System.Runtime.Remoting.Metadata
-
Expand
System.Runtime.Remoting.Metadata.W3cXsd2001
-
Expand
System.Runtime.Remoting.Services
-
Expand
System.Runtime.Serialization
-
Expand
System.Runtime.Serialization.Formatters
-
Expand
System.Runtime.Serialization.Formatters.Binary
-
Expand
System.Runtime.Versioning
-
Expand
System.Security
-
Expand
System.Security.Cryptography
-
Expand
System.Security.Cryptography.X509Certificates
-
Expand
System.Security.Permissions
-
Expand
System.Security.Policy
-
Expand
System.Security.Principal
-
Expand
System.Security.Util
-
Expand
System.Text
-
Expand
System.Threading
-
Expand
System.Runtime.Remoting.Channels.Http
-
Expand
System.Runtime.Remoting.Channels.Tcp
-
Expand
System.Runtime.Remoting.MetadataServices
-
Expand
System.Runtime.Serialization.Formatters.Soap.Xml
-
Expand
System.Runtime.Serialization.Formatters.Soap
-
Expand
AssemblyInfo
-
Expand
Attr
-
Expand
AttributeList
-
Expand
AttributeValueEntry
-
Expand
Converter
-
Expand
DottedInfo
-
Expand
HeaderStateEnum
-
Expand
InternalArrayTypeE
-
Expand
InternalElementTypeE
-
Expand
InternalFE
-
Expand
InternalMemberTypeE
-
Expand
InternalMemberValueE
-
Expand
InternalNameSpaceE
-
Expand
InternalObjectPositionE
-
Expand
InternalObjectTypeE
-
Expand
InternalParseStateE
-
Expand
InternalParseTypeE
-
Expand
InternalPrimitiveTypeE
-
Expand
InternalSerializerTypeE
-
Expand
InternalSoapMessage
-
Expand
ISerParser
-
Expand
ITrace
-
Expand
NameCache
-
Expand
NameCacheEntry
-
Expand
NameInfo
-
Expand
ObjectReader
-
Bind(string, string)
-
CheckSecurity(ParseRecord)
-
CheckSerializable(Type)
-
CreateReadObjectInfo(Type, string)
-
CreateReadObjectInfo(Type, string, Type, string)
-
Deserialize(HeaderHandler, ISerParser)
-
FastBindToType(string, string)
-
FilterBin64(string)
-
GetId(string)
-
GetObjectManager()
-
HasSurrogate(Type)
-
IndexTraceMessage(string, int)
-
IsInternalType(string, string)
-
IsRemoting()
-
IsWhiteSpace(string)
-
LoadAssemblyFromString(string)
-
NextRectangleMap(ParseRecord)
-
ObjectReader(Stream, ISurrogateSelector, StreamingContext, InternalFE, SerializationBinder)
-
Parse(ParseRecord)
-
ParseArray(ParseRecord)
-
ParseArrayMember(ParseRecord)
-
ParseArrayMemberEnd(ParseRecord)
-
ParseError(ParseRecord, ParseRecord)
-
ParseMember(ParseRecord)
-
ParseMemberEnd(ParseRecord)
-
ParseObject(ParseRecord)
-
ParseObjectEnd(ParseRecord)
-
ParseSerializedStreamHeader(ParseRecord)
-
ParseSerializedStreamHeaderEnd(ParseRecord)
-
ParseString(ParseRecord, ParseRecord)
-
RegisterObject(object, ParseRecord, ParseRecord)
-
SetVersion(int, int)
-
Expand
ObjectWriter
-
Expand
ParseRecord
-
Expand
PrimitiveArray
-
Expand
ReadObjectInfo
-
Expand
SerObjectInfoCache
-
Expand
SerObjectInfoInit
-
Expand
SerStack
-
Expand
SoapAssemblyInfo
-
Expand
SoapAttributeInfo
-
Expand
SoapAttributeType
-
Expand
SoapFormatter
-
Expand
SoapHandler
-
Expand
SoapParser
-
Expand
SoapUtil
-
Expand
SoapWriter
-
Expand
TypeNAssembly
-
Expand
Util
-
Expand
ValueFixup
-
Expand
ValueFixupEnum
-
Expand
WriteObjectInfo
-
Expand
XsdVersion
-
Expand
Microsoft.Tools.Caspol
-
Expand
Microsoft.Tools.Build
-
Expand
Microsoft.CSharp
-
Expand
System.CodeDom
-
Expand
System.CodeDom.Compiler
-
Expand
System.Collections.Specialized
-
Expand
System.ComponentModel
-
Expand
System.ComponentModel.Design
-
Expand
System.ComponentModel.Design.Serialization
-
Expand
System.Configuration
-
Expand
System.Web
-
Expand
System.Configuration.Provider
-
Expand
System.Configuration.Internal
-
Expand
System.Internal
-
Expand
System.Windows.Forms
-
Expand
System.Net
-
Expand
System.Net.Sockets
-
Expand
System.Net.NetworkInformation
-
Expand
System.Net.ComImports
-
Expand
System.Net.Security
-
Expand
System.Net.Cache
-
Expand
System.Net.Configuration
-
Expand
System.Text.RegularExpressions
-
Expand
System.Tools
-
Expand
System.IO.Compression
-
Expand
System.IO.Ports
-
Expand
System.Security.AccessControl
-
Expand
System.Xml
-
Expand
System.Xml.XPath.DataBinding
-
Expand
System.Xml.Schema
-
Expand
System.Xml.Serialization
-
Expand
System.Xml.Serialization.Advanced
-
Expand
System.Xml.Serialization.Configuration
-
Expand
System.Xml.XPath
-
Expand
System.Xml.Xsl
-
Expand
System.Xml.Xsl.IlGen
-
Expand
System.Xml.Xsl.Qil
-
Expand
System.Xml.Xsl.Runtime
-
Expand
System.Xml.Xsl.XPath
-
Expand
System.Xml.Xsl.Xslt
-
Expand
System.Xml.Xsl.XsltOld
-
Expand
System.Xml.Xsl.XsltOld.Debugger
-
Expand
Microsoft.JScript
-
Expand
Microsoft.Vsa
-
Expand
Microsoft.JScript.Vsa
- namespace System.Runtime.Serialization.Formatters.Soap
- {
-
- using System;
- using System.IO;
- using System.Reflection;
- using System.Collections;
- using System.Text;
- using System.Runtime.Remoting;
- using System.Runtime.Remoting.Metadata.W3cXsd2001;
- using System.Runtime.Remoting.Messaging;
- using System.Runtime.Serialization;
- using System.Security;
- using System.Security.Permissions;
- using System.Diagnostics;
- using System.Globalization;
-
- internal sealed class ObjectReader
- {
-
-
- internal ObjectIDGenerator m_idGenerator;
- internal Stream m_stream;
- internal ISurrogateSelector m_surrogates;
- internal StreamingContext m_context;
- internal ObjectManager m_objectManager;
- internal InternalFE formatterEnums;
- internal SerializationBinder m_binder;
-
- internal SoapHandler soapHandler;
-
-
- internal long topId = 0;
- internal SerStack topStack;
-
- internal bool isTopObjectSecondPass = false;
- internal bool isTopObjectResolved = true;
- internal bool isHeaderHandlerCalled = false;
- internal Exception deserializationSecurityException = null;
- internal object handlerObject = null;
- internal object topObject;
- internal long soapFaultId;
- internal Header[] headers;
- internal Header[] newheaders;
- internal bool IsFakeTopObject = false;
- internal HeaderHandler handler;
- internal SerObjectInfoInit serObjectInfoInit = null;
- internal IFormatterConverter m_formatterConverter = null;
-
-
- internal SerStack stack = new SerStack("ObjectReader Object Stack");
-
-
- internal SerStack valueFixupStack = new SerStack("ValueType Fixup Stack");
-
-
- internal Hashtable objectIdTable = new Hashtable(25);
-
- internal long objectIds = 0;
-
- internal int paramPosition = 0;
-
- internal int majorVersion = 0;
- internal int minorVersion = 0;
-
- internal string faultString = null;
-
-
-
-
- static internal SecurityPermission serializationPermission = new SecurityPermission(SecurityPermissionFlag.SerializationFormatter);
- private static FileIOPermission sfileIOPermission = new FileIOPermission(PermissionState.Unrestricted);
-
-
- internal ObjectReader(Stream stream, ISurrogateSelector selector, StreamingContext context, InternalFE formatterEnums, SerializationBinder binder)
- {
- InternalST.Soap(this, "Constructor ISurrogateSelector ", ((selector == null) ? "null selector " : "selector present"));
-
- if (stream == null) {
- throw new ArgumentNullException("stream", SoapUtil.GetResourceString("ArgumentNull_Stream"));
- }
-
- m_stream = stream;
- m_surrogates = selector;
- m_context = context;
- m_binder = binder;
- this.formatterEnums = formatterEnums;
-
- InternalST.Soap(this, "Constructor formatterEnums.FEtopObject ", formatterEnums.FEtopObject);
- if (formatterEnums.FEtopObject != null)
- IsFakeTopObject = true;
- else
- IsFakeTopObject = false;
-
- m_formatterConverter = new FormatterConverter();
- }
-
-
- private ObjectManager GetObjectManager()
- {
- new SecurityPermission(SecurityPermissionFlag.SerializationFormatter).Assert();
- return new ObjectManager(m_surrogates, m_context);
- }
-
-
-
-
-
- internal object Deserialize(HeaderHandler handler, ISerParser serParser)
- {
-
- InternalST.Soap(this, "Deserialize Entry handler", handler);
-
- if (serParser == null)
- throw new ArgumentNullException("serParser", String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("ArgumentNull_WithParamName"), serParser));
-
-
- deserializationSecurityException = null;
- try {
- serializationPermission.Demand();
- }
- catch (Exception e) {
- deserializationSecurityException = e;
- }
- catch {
- deserializationSecurityException = new Exception(SoapUtil.GetResourceString("Serialization_NonClsCompliantException"));
- }
-
- this.handler = handler;
- isTopObjectSecondPass = false;
- isHeaderHandlerCalled = false;
-
- if (handler != null)
- IsFakeTopObject = true;
-
- m_idGenerator = new ObjectIDGenerator();
-
-
- m_objectManager = GetObjectManager();
-
- serObjectInfoInit = new SerObjectInfoInit();
- objectIdTable.Clear();
- objectIds = 0;
-
-
- serParser.Run();
-
- if (handler != null) {
- InternalST.Soap(this, "Deserialize Fixup Before Delegate Invoke");
- m_objectManager.DoFixups();
-
-
-
- if (handlerObject == null) {
- InternalST.Soap(this, "Deserialize Before SoapFault Delegate Invoke ");
- handlerObject = handler(newheaders);
- InternalST.Soap(this, "Deserialize after SoapFault Delegate Invoke");
- }
-
-
-
-
- if ((soapFaultId > 0) && (handlerObject != null)) {
- InternalST.Soap(this, "Deserialize SoapFault ");
- topStack = new SerStack("Top ParseRecords");
- ParseRecord pr = new ParseRecord();
- pr.PRparseTypeEnum = InternalParseTypeE.Object;
- pr.PRobjectPositionEnum = InternalObjectPositionE.Top;
- pr.PRparseStateEnum = InternalParseStateE.Object;
- pr.PRname = "Response";
- topStack.Push(pr);
- pr = new ParseRecord();
- pr.PRparseTypeEnum = InternalParseTypeE.Member;
- pr.PRobjectPositionEnum = InternalObjectPositionE.Child;
- pr.PRmemberTypeEnum = InternalMemberTypeE.Field;
- pr.PRmemberValueEnum = InternalMemberValueE.Reference;
- pr.PRparseStateEnum = InternalParseStateE.Member;
- pr.PRname = "__fault";
- pr.PRidRef = soapFaultId;
- topStack.Push(pr);
- pr = new ParseRecord();
- pr.PRparseTypeEnum = InternalParseTypeE.ObjectEnd;
- pr.PRobjectPositionEnum = InternalObjectPositionE.Top;
- pr.PRparseStateEnum = InternalParseStateE.Object;
- pr.PRname = "Response";
- topStack.Push(pr);
- isTopObjectResolved = false;
- }
- }
-
-
-
- if (!isTopObjectResolved) {
-
- InternalST.Soap(this, "Deserialize TopObject Second Pass");
- isTopObjectSecondPass = true;
- topStack.Reverse();
-
-
-
- int topStackLength = topStack.Count();
- ParseRecord pr = null;
- for (int i = 0; i < topStackLength; i++) {
- pr = (ParseRecord)topStack.Pop();
- Parse(pr);
- }
- }
-
-
- InternalST.Soap(this, "Deserialize Finished Parsing DoFixups");
-
- m_objectManager.DoFixups();
-
- if (topObject == null)
- throw new SerializationException(SoapUtil.GetResourceString("Serialization_TopObject"));
-
-
-
- if (HasSurrogate(topObject.GetType()) && topId != 0)
-
- topObject = m_objectManager.GetObject(topId);
-
- if (topObject is IObjectReference) {
- topObject = ((IObjectReference)topObject).GetRealObject(m_context);
- }
-
- InternalST.Soap(this, "Deserialize Exit ", topObject);
-
- m_objectManager.RaiseDeserializationEvent();
-
-
-
- if ((formatterEnums.FEtopObject != null) && (topObject is InternalSoapMessage)) {
-
- InternalST.Soap(this, "Deserialize SoapMessage Entry ");
-
- InternalSoapMessage ismc = (InternalSoapMessage)topObject;
- ISoapMessage smc = (ISoapMessage)formatterEnums.FEtopObject;
- smc.MethodName = ismc.methodName;
- smc.XmlNameSpace = ismc.xmlNameSpace;
- smc.ParamNames = ismc.paramNames;
- smc.ParamValues = ismc.paramValues;
- smc.Headers = headers;
- topObject = smc;
- isTopObjectResolved = true;
- InternalST.Soap(this, "Deserialize SoapMessage Exit topObject ", topObject, " method name ", smc.MethodName);
- }
-
- return topObject;
- }
-
- private bool HasSurrogate(Type t)
- {
- if (m_surrogates == null)
- return false;
- ISurrogateSelector notUsed;
- return m_surrogates.GetSurrogate(t, m_context, out notUsed) != null;
- }
-
- private void CheckSerializable(Type t)
- {
- if (!t.IsSerializable && !HasSurrogate(t))
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_NonSerType"), t.FullName, t.Module.Assembly.FullName));
- }
-
- internal ReadObjectInfo CreateReadObjectInfo(Type objectType, string assemblyName)
- {
- ReadObjectInfo objectInfo = ReadObjectInfo.Create(objectType, m_surrogates, m_context, m_objectManager, serObjectInfoInit, m_formatterConverter, assemblyName);
- objectInfo.SetVersion(majorVersion, minorVersion);
- return objectInfo;
- }
-
- internal ReadObjectInfo CreateReadObjectInfo(Type objectType, string[] memberNames, Type[] memberTypes, string assemblyName)
- {
- ReadObjectInfo objectInfo = ReadObjectInfo.Create(objectType, memberNames, memberTypes, m_surrogates, m_context, m_objectManager, serObjectInfoInit, m_formatterConverter, assemblyName);
- objectInfo.SetVersion(majorVersion, minorVersion);
- return objectInfo;
- }
-
-
-
-
- internal void Parse(ParseRecord pr)
- {
- InternalST.Soap(this, "Parse Entry");
- stack.Dump();
- pr.Dump();
-
- switch (pr.PRparseTypeEnum) {
- case InternalParseTypeE.SerializedStreamHeader:
- ParseSerializedStreamHeader(pr);
- break;
- case InternalParseTypeE.SerializedStreamHeaderEnd:
- ParseSerializedStreamHeaderEnd(pr);
- break;
- case InternalParseTypeE.Object:
- ParseObject(pr);
- break;
- case InternalParseTypeE.ObjectEnd:
- ParseObjectEnd(pr);
- break;
- case InternalParseTypeE.Member:
- ParseMember(pr);
- break;
- case InternalParseTypeE.MemberEnd:
- ParseMemberEnd(pr);
- break;
- case InternalParseTypeE.Body:
- case InternalParseTypeE.BodyEnd:
- case InternalParseTypeE.Envelope:
- case InternalParseTypeE.EnvelopeEnd:
- break;
- case InternalParseTypeE.Empty:
- default:
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_XMLElement"), pr.PRname));
- break;
-
- }
- }
-
-
- private void ParseError(ParseRecord processing, ParseRecord onStack)
- {
- InternalST.Soap(this, " ParseError ", processing, " ", onStack);
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_ParseError"), onStack.PRname + " " + ((Enum)onStack.PRparseTypeEnum).ToString() + " " + processing.PRname + " " + ((Enum)processing.PRparseTypeEnum).ToString()));
- }
-
-
- private void ParseSerializedStreamHeader(ParseRecord pr)
- {
- InternalST.Soap(this, "SerializedHeader ", pr);
- stack.Push(pr);
- }
-
-
- private void ParseSerializedStreamHeaderEnd(ParseRecord pr)
- {
- InternalST.Soap(this, "SerializedHeaderEnd ", pr);
- stack.Pop();
- }
-
-
-
- private bool IsRemoting {
- get { return IsFakeTopObject; }
- }
-
- private void CheckSecurity(ParseRecord pr)
- {
- InternalST.SoapAssert(pr != null, "[BinaryObjectReader.CheckSecurity]pr!=null");
- Type t = pr.PRdtType;
-
- if (t != null) {
- if (IsRemoting) {
- if (typeof(MarshalByRefObject).IsAssignableFrom(t))
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_MBRAsMBV"), t.FullName));
- FormatterServices.CheckTypeSecurity(t, formatterEnums.FEsecurityLevel);
- }
- }
-
-
-
- if (deserializationSecurityException == null) {
- return;
- }
-
-
-
- if (t != null) {
- if (t.IsPrimitive || t == Converter.typeofString)
- return;
-
- if (typeof(Enum).IsAssignableFrom(t))
- return;
-
- if (t.IsArray) {
- Type type = t.GetElementType();
- if (type.IsPrimitive || type == Converter.typeofString)
- return;
- }
- }
-
- throw deserializationSecurityException;
- }
-
-
- private void ParseObject(ParseRecord pr)
- {
- InternalST.Soap(this, "ParseObject Entry ");
-
- if (pr.PRobjectPositionEnum == InternalObjectPositionE.Top)
- topId = pr.PRobjectId;
-
- if (pr.PRparseTypeEnum == InternalParseTypeE.Object) {
- InternalST.Soap(this, "ParseObject Push " + pr.PRname);
- stack.Push(pr);
-
- }
-
- if (pr.PRobjectTypeEnum == InternalObjectTypeE.Array) {
- ParseArray(pr);
- InternalST.Soap(this, "ParseObject Exit, ParseArray ");
- return;
- }
-
- if ((pr.PRdtType == null) && !IsFakeTopObject)
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_TopObjectInstantiate"), pr.PRname));
-
-
- if (pr.PRobjectPositionEnum == InternalObjectPositionE.Top && IsFakeTopObject && pr.PRdtType != Converter.typeofSoapFault) {
-
-
- if (handler != null) {
-
- InternalST.Soap(this, "ParseObject FakeTopObject with handlerObject ");
-
-
-
- if (!isHeaderHandlerCalled) {
- newheaders = null;
- isHeaderHandlerCalled = true;
- if (headers == null) {
- newheaders = new Header[1];
- }
- else {
- newheaders = new Header[headers.Length + 1];
- Array.Copy(headers, 0, newheaders, 1, headers.Length);
- }
-
- Header methodNameHeader = new Header("__methodName", pr.PRname, false, pr.PRnameXmlKey);
- newheaders[0] = methodNameHeader;
- InternalST.Soap(this, "Deserialize Before Delegate Invoke ");
- handlerObject = handler(newheaders);
-
- InternalST.Soap(this, "Deserialize after Delegate Invoke");
- InternalST.Soap(this, "Deserialize delgate object ", ((handlerObject == null) ? "null" : handlerObject));
- }
-
- if (isHeaderHandlerCalled) {
-
-
- pr.PRnewObj = handlerObject;
- pr.PRdtType = handlerObject.GetType();
- CheckSecurity(pr);
- if (pr.PRnewObj is IFieldInfo) {
- IFieldInfo fi = (IFieldInfo)pr.PRnewObj;
- if ((fi.FieldTypes != null) && (fi.FieldTypes.Length > 0)) {
- pr.PRobjectInfo = CreateReadObjectInfo(pr.PRdtType, fi.FieldNames, fi.FieldTypes, pr.PRassemblyName);
- }
- }
- }
- else {
-
-
- isTopObjectResolved = false;
- topStack = new SerStack("Top ParseRecords");
- InternalST.Soap(this, "ParseObject Handler Push " + pr.PRname);
- topStack.Push(pr.Copy());
- return;
- }
- }
- else if (formatterEnums.FEtopObject != null) {
-
- InternalST.Soap(this, "ParseObject FakeTopObject with SoapMessage ");
- if (isTopObjectSecondPass) {
-
- pr.PRnewObj = new InternalSoapMessage();
- pr.PRdtType = typeof(InternalSoapMessage);
- CheckSecurity(pr);
- if (formatterEnums.FEtopObject != null) {
- ISoapMessage soapMessage = (ISoapMessage)formatterEnums.FEtopObject;
- pr.PRobjectInfo = CreateReadObjectInfo(pr.PRdtType, soapMessage.ParamNames, soapMessage.ParamTypes, pr.PRassemblyName);
- }
- }
- else {
-
- isTopObjectResolved = false;
- topStack = new SerStack("Top ParseRecords");
- topStack.Push(pr.Copy());
- return;
- }
- }
- }
- else if (pr.PRdtType == Converter.typeofString) {
-
- if (pr.PRvalue != null) {
- pr.PRnewObj = pr.PRvalue;
- if (pr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObject String as top level, Top Object Resolved");
- isTopObjectResolved = true;
- topObject = pr.PRnewObj;
-
- return;
- }
- else {
- InternalST.Soap(this, "ParseObject String as an object");
- stack.Pop();
- RegisterObject(pr.PRnewObj, pr, (ParseRecord)stack.Peek());
- return;
- }
- }
- else {
-
- return;
- }
- }
- else {
- if (pr.PRdtType == null) {
- ParseRecord objectPr = (ParseRecord)stack.Peek();
- if (objectPr.PRdtType == Converter.typeofSoapFault) {
- InternalST.Soap(this, "ParseObject unknown SoapFault detail");
- throw new ServerException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_SoapFault"), faultString));
- }
-
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_TypeElement"), pr.PRname));
- }
- CheckSerializable(pr.PRdtType);
- if (IsRemoting && formatterEnums.FEsecurityLevel != TypeFilterLevel.Full)
- pr.PRnewObj = FormatterServices.GetSafeUninitializedObject(pr.PRdtType);
- else
- pr.PRnewObj = FormatterServices.GetUninitializedObject(pr.PRdtType);
-
- CheckSecurity(pr);
-
- m_objectManager.RaiseOnDeserializingEvent(pr.PRnewObj);
-
- }
-
- if (pr.PRnewObj == null)
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_TopObjectInstantiate"), pr.PRdtType));
-
- long genId = pr.PRobjectId;
- if (genId < 1)
- pr.PRobjectId = GetId("GenId-" + objectIds);
-
-
- if (IsFakeTopObject && pr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObject fake Top object resolved ", pr.PRnewObj);
- isTopObjectResolved = true;
- topObject = pr.PRnewObj;
- }
-
- if (pr.PRobjectInfo == null)
- pr.PRobjectInfo = CreateReadObjectInfo(pr.PRdtType, pr.PRassemblyName);
- pr.PRobjectInfo.obj = pr.PRnewObj;
-
- if (IsFakeTopObject && pr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObject AddValue to fake object ", pr.PRobjectInfo.obj);
-
- pr.PRobjectInfo.AddValue("__methodName", pr.PRname);
- pr.PRobjectInfo.AddValue("__keyToNamespaceTable", soapHandler.keyToNamespaceTable);
- pr.PRobjectInfo.AddValue("__paramNameList", pr.PRobjectInfo.SetFakeObject());
- if (formatterEnums.FEtopObject != null)
- pr.PRobjectInfo.AddValue("__xmlNameSpace", pr.PRxmlNameSpace);
- }
-
- InternalST.Soap(this, "ParseObject Exit ");
- }
-
-
- private bool IsWhiteSpace(string value)
- {
- for (int i = 0; i < value.Length; i++) {
- if (value[i] == ' ' || value[i] == '\n' || value[i] == '\r')
- continue;
- else
- return false;
- }
- return true;
- }
-
-
-
- private void ParseObjectEnd(ParseRecord pr)
- {
- InternalST.Soap(this, "ParseObjectEnd Entry ", pr.Trace());
- ParseRecord objectPr = (ParseRecord)stack.Peek();
- if (objectPr == null)
- objectPr = pr;
-
-
-
-
- InternalST.Soap(this, "ParseObjectEnd objectPr ", objectPr.Trace());
-
- if (objectPr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObjectEnd Top Object dtType ", objectPr.PRdtType);
- if (objectPr.PRdtType == Converter.typeofString) {
- InternalST.Soap(this, "ParseObjectEnd Top String");
- if (objectPr.PRvalue == null)
- objectPr.PRvalue = String.Empty;
-
- objectPr.PRnewObj = objectPr.PRvalue;
- CheckSecurity(objectPr);
- isTopObjectResolved = true;
- topObject = objectPr.PRnewObj;
- return;
- }
- else if (objectPr.PRdtType != null && objectPr.PRvalue != null && !IsWhiteSpace(objectPr.PRvalue) && (objectPr.PRdtType.IsPrimitive || objectPr.PRdtType == Converter.typeofTimeSpan)) {
-
- objectPr.PRnewObj = Converter.FromString(objectPr.PRvalue, Converter.ToCode(objectPr.PRdtType));
- CheckSecurity(objectPr);
- isTopObjectResolved = true;
- topObject = objectPr.PRnewObj;
- return;
-
- }
- else if ((!isTopObjectResolved) && (objectPr.PRdtType != Converter.typeofSoapFault)) {
- InternalST.Soap(this, "ParseObjectEnd Top but not String");
-
- topStack.Push(pr.Copy());
-
- if (objectPr.PRparseRecordId == pr.PRparseRecordId) {
-
-
-
-
- stack.Pop();
- }
- return;
- }
- }
-
- stack.Pop();
-
- ParseRecord parentPr = (ParseRecord)stack.Peek();
-
- if (objectPr.PRobjectTypeEnum == InternalObjectTypeE.Array) {
- if (objectPr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObjectEnd Top Object (Array) Resolved");
- isTopObjectResolved = true;
- topObject = objectPr.PRnewObj;
- }
-
- InternalST.Soap(this, "ParseArray RegisterObject ", objectPr.PRobjectId, " ", objectPr.PRnewObj.GetType());
- RegisterObject(objectPr.PRnewObj, objectPr, parentPr);
-
- return;
- }
-
- if (objectPr.PRobjectInfo != null) {
- objectPr.PRobjectInfo.PopulateObjectMembers();
- }
-
- if (objectPr.PRnewObj == null) {
- if (objectPr.PRdtType == Converter.typeofString) {
- InternalST.Soap(this, "ParseObjectEnd String ");
- if (objectPr.PRvalue == null)
- objectPr.PRvalue = String.Empty;
-
- objectPr.PRnewObj = objectPr.PRvalue;
- CheckSecurity(objectPr);
- }
- else
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_ObjectMissing"), pr.PRname));
- }
-
-
- if (!objectPr.PRisRegistered && objectPr.PRobjectId > 0) {
- InternalST.Soap(this, "ParseObjectEnd Register Object ", objectPr.PRobjectId, " ", objectPr.PRnewObj.GetType());
- RegisterObject(objectPr.PRnewObj, objectPr, parentPr);
- }
-
- if (objectPr.PRisValueTypeFixup) {
- InternalST.Soap(this, "ParseObjectEnd ValueTypeFixup ", objectPr.PRnewObj.GetType());
- ValueFixup fixup = (ValueFixup)valueFixupStack.Pop();
-
- fixup.Fixup(objectPr, parentPr);
-
- }
-
- if (objectPr.PRobjectPositionEnum == InternalObjectPositionE.Top) {
- InternalST.Soap(this, "ParseObjectEnd Top Object Resolved ", objectPr.PRnewObj.GetType());
- isTopObjectResolved = true;
- topObject = objectPr.PRnewObj;
- }
-
- if (objectPr.PRnewObj is SoapFault)
- soapFaultId = objectPr.PRobjectId;
-
- if (objectPr.PRobjectInfo != null) {
- if (objectPr.PRobjectInfo.bfake && !objectPr.PRobjectInfo.bSoapFault)
- objectPr.PRobjectInfo.AddValue("__fault", null);
-
- objectPr.PRobjectInfo.ObjectEnd();
- }
-
- InternalST.Soap(this, "ParseObjectEnd Exit ", objectPr.PRnewObj, " id: ", objectPr.PRobjectId);
- }
-
-
-
-
- private void ParseArray(