private void ReadObjectString(BinaryHeaderEnum binaryHeaderEnum) { SerTrace.Log(this, "ReadObjectString"); if (objectString == null) { objectString = new BinaryObjectString(); } if (binaryHeaderEnum == BinaryHeaderEnum.ObjectString) { objectString.Read(this); objectString.Dump(); } else { if (crossAppDomainString == null) { crossAppDomainString = new BinaryCrossAppDomainString(); } crossAppDomainString.Read(this); crossAppDomainString.Dump(); objectString.value = objectReader.CrossAppDomainArray(crossAppDomainString.value) as String; if (objectString.value == null) { throw new SerializationException(String.Format(Environment.GetResourceString("Serialization_CrossAppDomainError"), "String", crossAppDomainString.value)); } objectString.objectId = crossAppDomainString.objectId; } prs.Init(); prs.PRparseTypeEnum = InternalParseTypeE.Object; prs.PRobjectId = objectReader.GetId(objectString.objectId); if (prs.PRobjectId == topId) { prs.PRobjectPositionEnum = InternalObjectPositionE.Top; } prs.PRobjectTypeEnum = InternalObjectTypeE.Object; ObjectProgress objectOp = (ObjectProgress)stack.Peek(); prs.PRvalue = objectString.value; prs.PRkeyDt = "System.String"; prs.PRdtType = Converter.typeofString; prs.PRdtTypeCode = InternalPrimitiveTypeE.Invalid; prs.PRvarValue = objectString.value; //Need to set it because ObjectReader is picking up value from variant, not pr.PRvalue if (objectOp == null) { // Top level String SerTrace.Log(this, "ReadObjectString, Non-Nested"); prs.PRparseTypeEnum = InternalParseTypeE.Object; prs.PRname = "System.String"; } else { // Nested in an Object SerTrace.Log(this, "ReadObjectString, Nested"); prs.PRparseTypeEnum = InternalParseTypeE.Member; prs.PRmemberValueEnum = InternalMemberValueE.InlineValue; switch (objectOp.objectTypeEnum) { case InternalObjectTypeE.Object: prs.PRname = objectOp.name; prs.PRmemberTypeEnum = InternalMemberTypeE.Field; break; case InternalObjectTypeE.Array: prs.PRmemberTypeEnum = InternalMemberTypeE.Item; break; default: throw new SerializationException(String.Format(Environment.GetResourceString("Serialization_ObjectTypeEnum"), ((Enum)objectOp.objectTypeEnum).ToString())); } } objectReader.Parse(prs); }