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);
}