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