internal void Init() { this._fullName = null; this._objectId = 0L; this._assemId = 0L; this._primitiveTypeEnum = PrimitiveTypeEnum.Invalid; this._type = null; this._isSealed = false; this._transmitTypeOnObject = false; this._transmitTypeOnMember = false; this._isParentTypeOnObject = false; this._isArray = false; this._isArrayItem = false; this._arrayEnum = ArrayTypeEnum.Empty; this._sealedStatusChecked = false; }
public void Init() { parseTypeEnum = ParseTypeEnum.Empty; objectTypeEnum = ObjectTypeEnum.Empty; arrayTypeEnum = ArrayTypeEnum.Empty; memberTypeEnum = MemberTypeEnum.Empty; memberValueEnum = MemberValueEnum.Empty; objectPositionEnum = ObjectPositionEnum.Empty; name = null; value = null; keyDt = null; dtType = null; dtTypeCode = PrimitiveTypeEnum.Invalid; objectId = 0L; idRef = 0L; arrayElementTypeString = null; arrayElementType = null; isArrayVariant = false; arrayElementTypeCode = PrimitiveTypeEnum.Invalid; rank = 0; lengthA = null; lowerBoundA = null; indexMap = null; memberIndex = 0; linearlength = 0; rectangularMap = null; isLowerBound = false; isValueTypeFixup = false; newObj = null; objectA = null; primitiveArray = null; objectInfo = null; isRegistered = false; memberData = null; si = null; consecutiveNullArrayEntryCount = 0; }
private void WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo) { bool flag = false; if (memberNameInfo == null) { memberNameInfo = this.TypeToNameInfo(objectInfo); flag = true; } memberNameInfo._isArray = true; long num = objectInfo._objectId; memberNameInfo._objectId = objectInfo._objectId; Array array = (Array)objectInfo._obj; Type elementType = objectInfo._objectType.GetElementType(); WriteObjectInfo info = null; if (!elementType.IsPrimitive) { info = WriteObjectInfo.Serialize(elementType, this._surrogates, this._context, this._serObjectInfoInit, this._formatterConverter, this._binder); info._assemId = this.GetAssemblyId(info); } NameInfo arrayElemTypeNameInfo = (info == null) ? this.TypeToNameInfo(elementType) : this.TypeToNameInfo(info); arrayElemTypeNameInfo._isArray = arrayElemTypeNameInfo._type.IsArray; NameInfo arrayNameInfo = memberNameInfo; arrayNameInfo._objectId = num; arrayNameInfo._isArray = true; arrayElemTypeNameInfo._objectId = num; arrayElemTypeNameInfo._transmitTypeOnMember = memberNameInfo._transmitTypeOnMember; arrayElemTypeNameInfo._transmitTypeOnObject = memberNameInfo._transmitTypeOnObject; arrayElemTypeNameInfo._isParentTypeOnObject = memberNameInfo._isParentTypeOnObject; int rank = array.Rank; int[] lengthA = new int[rank]; int[] lowerBoundA = new int[rank]; int[] numArray3 = new int[rank]; for (int i = 0; i < rank; i++) { lengthA[i] = array.GetLength(i); lowerBoundA[i] = array.GetLowerBound(i); numArray3[i] = array.GetUpperBound(i); } ArrayTypeEnum ee = !arrayElemTypeNameInfo._isArray ? ((rank != 1) ? ArrayTypeEnum.Rectangular : ArrayTypeEnum.Single) : ((rank == 1) ? ArrayTypeEnum.Jagged : ArrayTypeEnum.Rectangular); arrayElemTypeNameInfo._arrayEnum = ee; if (object.ReferenceEquals(elementType, Converter.s_typeofByte) && ((rank == 1) && (lowerBoundA[0] == 0))) { this._serWriter.WriteObjectByteArray(/*memberNameInfo,*/ arrayNameInfo, info, arrayElemTypeNameInfo, lengthA[0], lowerBoundA[0], (byte[])array); } else { if (object.ReferenceEquals(elementType, Converter.s_typeofObject) || (Nullable.GetUnderlyingType(elementType) != null)) { memberNameInfo._transmitTypeOnMember = true; arrayElemTypeNameInfo._transmitTypeOnMember = true; } if (this.CheckTypeFormat(this._formatterEnums.TypeFormat, FormatterTypeStyle.TypesAlways)) { memberNameInfo._transmitTypeOnObject = true; arrayElemTypeNameInfo._transmitTypeOnObject = true; } if (ee == ArrayTypeEnum.Single) { this._serWriter.WriteSingleArray(/*memberNameInfo,*/ arrayNameInfo, info, arrayElemTypeNameInfo, lengthA[0], lowerBoundA[0], array); if (!Converter.IsWriteAsByteArray(arrayElemTypeNameInfo._primitiveTypeEnum) || (lowerBoundA[0] != 0)) { object[] objArray = null; if (!elementType.IsValueType) { objArray = (object[])array; } int num4 = numArray3[0] + 1; int index = lowerBoundA[0]; while (true) { if (index >= num4) { this._serWriter.WriteItemEnd(); break; } if (objArray == null) { this.WriteArrayMember(objectInfo, arrayElemTypeNameInfo, array.GetValue(index)); } else { this.WriteArrayMember(objectInfo, arrayElemTypeNameInfo, objArray[index]); } index++; } } } else if (ee == ArrayTypeEnum.Jagged) { arrayNameInfo._objectId = num; this._serWriter.WriteJaggedArray(arrayNameInfo, info, arrayElemTypeNameInfo, lengthA[0], lowerBoundA[0]); Array array2 = array; int index = lowerBoundA[0]; while (true) { if (index >= (numArray3[0] + 1)) { this._serWriter.WriteItemEnd(); break; } this.WriteArrayMember(objectInfo, arrayElemTypeNameInfo, array2.GetValue(index)); index++; } } else { arrayNameInfo._objectId = num; this._serWriter.WriteRectangleArray(/*memberNameInfo,*/ arrayNameInfo, info, arrayElemTypeNameInfo, rank, lengthA, lowerBoundA); bool flag2 = false; int index = 0; while (true) { if (index < rank) { if (lengthA[index] != 0) { index++; continue; } flag2 = true; } if (!flag2) { this.WriteRectangle(objectInfo, rank, lengthA, array, arrayElemTypeNameInfo, lowerBoundA); } this._serWriter.WriteItemEnd(); break; } } //this._serWriter.WriteObjectEnd(memberNameInfo, arrayNameInfo); this.PutNameInfo(arrayElemTypeNameInfo); if (flag) { this.PutNameInfo(memberNameInfo); } } }