// Initialize ParseRecord. Called when reusing. internal void Init() { // Enums _parseTypeEnum = InternalParseTypeE.Empty; _objectTypeEnum = InternalObjectTypeE.Empty; _arrayTypeEnum = InternalArrayTypeE.Empty; _memberTypeEnum = InternalMemberTypeE.Empty; _memberValueEnum = InternalMemberValueE.Empty; _objectPositionEnum = InternalObjectPositionE.Empty; // Object _name = null; // Value _value = null; // dt attribute _keyDt = null; _dtType = null; _dtTypeCode = InternalPrimitiveTypeE.Invalid; // Object ID _objectId = 0; // Reference ID _idRef = 0; // Array // Array Element Type _arrayElementTypeString = null; _arrayElementType = null; _isArrayVariant = false; _arrayElementTypeCode = InternalPrimitiveTypeE.Invalid; // Parsed array information _rank = 0; _lengthA = null; _lowerBoundA = null; // Array map for placing array elements in array _indexMap = null; _memberIndex = 0; _linearlength = 0; _rectangularMap = null; _isLowerBound = false; // ValueType Fixup needed _isValueTypeFixup = false; _newObj = null; _objectA = null; _primitiveArray = null; _objectInfo = null; _isRegistered = false; _memberData = null; _si = null; _consecutiveNullArrayEntryCount = 0; }
internal void Init() { this.PRparseTypeEnum = InternalParseTypeE.Empty; this.PRobjectTypeEnum = InternalObjectTypeE.Empty; this.PRarrayTypeEnum = InternalArrayTypeE.Empty; this.PRmemberTypeEnum = InternalMemberTypeE.Empty; this.PRmemberValueEnum = InternalMemberValueE.Empty; this.PRobjectPositionEnum = InternalObjectPositionE.Empty; this.PRname = null; this.PRvalue = null; this.PRkeyDt = null; this.PRdtType = null; this.PRdtTypeCode = InternalPrimitiveTypeE.Invalid; this.PRisEnum = false; this.PRobjectId = 0L; this.PRidRef = 0L; this.PRarrayElementTypeString = null; this.PRarrayElementType = null; this.PRisArrayVariant = false; this.PRarrayElementTypeCode = InternalPrimitiveTypeE.Invalid; this.PRrank = 0; this.PRlengthA = null; this.PRpositionA = null; this.PRlowerBoundA = null; this.PRupperBoundA = null; this.PRindexMap = null; this.PRmemberIndex = 0; this.PRlinearlength = 0; this.PRrectangularMap = null; this.PRisLowerBound = false; this.PRtopId = 0L; this.PRheaderId = 0L; this.PRisValueTypeFixup = false; this.PRnewObj = null; this.PRobjectA = null; this.PRprimitiveArray = null; this.PRobjectInfo = null; this.PRisRegistered = false; this.PRmemberData = null; this.PRsi = null; this.PRnullCount = 0; }
// Initialize ParseRecord. Called when reusing. internal void Init() { // Enums PRparseTypeEnum = InternalParseTypeE.Empty; PRobjectTypeEnum = InternalObjectTypeE.Empty; PRarrayTypeEnum = InternalArrayTypeE.Empty; PRmemberTypeEnum = InternalMemberTypeE.Empty; PRmemberValueEnum = InternalMemberValueE.Empty; PRobjectPositionEnum = InternalObjectPositionE.Empty; // Object PRname = null; // Value PRvalue = null; // dt attribute PRkeyDt = null; PRdtType = null; PRdtTypeCode = InternalPrimitiveTypeE.Invalid; PRisEnum = false; // Object ID PRobjectId = 0; // Reference ID PRidRef = 0; // Array // Array Element Type PRarrayElementTypeString = null; PRarrayElementType = null; PRisArrayVariant = false; PRarrayElementTypeCode = InternalPrimitiveTypeE.Invalid; // Parsed array information PRrank = 0; PRlengthA = null; PRpositionA = null; PRlowerBoundA = null; PRupperBoundA = null; // Array map for placing array elements in array PRindexMap = null; PRmemberIndex = 0; PRlinearlength = 0; PRrectangularMap = null; PRisLowerBound = false; // SerializedStreamHeader information PRtopId = 0; PRheaderId = 0; // ValueType Fixup needed PRisValueTypeFixup = false; PRnewObj = null; PRobjectA = null; PRprimitiveArray = null; PRobjectInfo = null; PRisRegistered = false; PRmemberData = null; PRsi = null; PRnullCount = 0; }
private void ParseArray(ParseRecord pr) { long num1 = pr.PRobjectId; if (pr.PRarrayTypeEnum == InternalArrayTypeE.Base64) { pr.PRnewObj = pr.PRvalue.Length <= 0 ? (object)new byte[0] : (object)Convert.FromBase64String(pr.PRvalue); if (this.stack.Peek() == pr) { this.stack.Pop(); } if (pr.PRobjectPositionEnum == InternalObjectPositionE.Top) { this.TopObject = pr.PRnewObj; } ParseRecord objectPr = (ParseRecord)this.stack.Peek(); this.RegisterObject(pr.PRnewObj, pr, objectPr); } else if (pr.PRnewObj != null && Converter.IsWriteAsByteArray(pr.PRarrayElementTypeCode)) { if (pr.PRobjectPositionEnum == InternalObjectPositionE.Top) { this.TopObject = pr.PRnewObj; } ParseRecord objectPr = (ParseRecord)this.stack.Peek(); this.RegisterObject(pr.PRnewObj, pr, objectPr); } else if (pr.PRarrayTypeEnum == InternalArrayTypeE.Jagged || pr.PRarrayTypeEnum == InternalArrayTypeE.Single) { bool flag = true; if (pr.PRlowerBoundA == null || pr.PRlowerBoundA[0] == 0) { if (pr.PRarrayElementType == Converter.typeofString) { ParseRecord parseRecord1 = pr; string[] strArray = new string[parseRecord1.PRlengthA[0]]; parseRecord1.PRobjectA = (object[])strArray; ParseRecord parseRecord2 = pr; object[] objArray = parseRecord2.PRobjectA; parseRecord2.PRnewObj = (object)objArray; flag = false; } else if (pr.PRarrayElementType == Converter.typeofObject) { ParseRecord parseRecord1 = pr; object[] objArray1 = new object[parseRecord1.PRlengthA[0]]; parseRecord1.PRobjectA = objArray1; ParseRecord parseRecord2 = pr; object[] objArray2 = parseRecord2.PRobjectA; parseRecord2.PRnewObj = (object)objArray2; flag = false; } else if (pr.PRarrayElementType != null) { pr.PRnewObj = (object)Array.UnsafeCreateInstance(pr.PRarrayElementType, pr.PRlengthA[0]); } pr.PRisLowerBound = false; } else { if (pr.PRarrayElementType != null) { pr.PRnewObj = (object)Array.UnsafeCreateInstance(pr.PRarrayElementType, pr.PRlengthA, pr.PRlowerBoundA); } pr.PRisLowerBound = true; } if (pr.PRarrayTypeEnum == InternalArrayTypeE.Single) { if (!pr.PRisLowerBound && Converter.IsWriteAsByteArray(pr.PRarrayElementTypeCode)) { ParseRecord parseRecord = pr; PrimitiveArray primitiveArray = new PrimitiveArray(parseRecord.PRarrayElementTypeCode, (Array)pr.PRnewObj); parseRecord.PRprimitiveArray = primitiveArray; } else if (flag && pr.PRarrayElementType != null && (!pr.PRarrayElementType.IsValueType && !pr.PRisLowerBound)) { ParseRecord parseRecord = pr; object[] objArray = (object[])parseRecord.PRnewObj; parseRecord.PRobjectA = objArray; } } if (pr.PRobjectPositionEnum == InternalObjectPositionE.Headers) { this.headers = (Header[])pr.PRnewObj; } pr.PRindexMap = new int[1]; } else if (pr.PRarrayTypeEnum == InternalArrayTypeE.Rectangular) { pr.PRisLowerBound = false; if (pr.PRlowerBoundA != null) { for (int index = 0; index < pr.PRrank; ++index) { if (pr.PRlowerBoundA[index] != 0) { pr.PRisLowerBound = true; } } } if (pr.PRarrayElementType != null) { pr.PRnewObj = pr.PRisLowerBound ? (object)Array.UnsafeCreateInstance(pr.PRarrayElementType, pr.PRlengthA, pr.PRlowerBoundA) : (object)Array.UnsafeCreateInstance(pr.PRarrayElementType, pr.PRlengthA); } int num2 = 1; for (int index = 0; index < pr.PRrank; ++index) { num2 *= pr.PRlengthA[index]; } ParseRecord parseRecord1 = pr; int[] numArray1 = new int[parseRecord1.PRrank]; parseRecord1.PRindexMap = numArray1; ParseRecord parseRecord2 = pr; int[] numArray2 = new int[parseRecord2.PRrank]; parseRecord2.PRrectangularMap = numArray2; pr.PRlinearlength = num2; } else { throw new SerializationException(Environment.GetResourceString("Serialization_ArrayType", (object)pr.PRarrayTypeEnum)); } this.CheckSecurity(pr); }