private int GetSizeOfOneObjectToBuffer() { int size; byte objType = GetBssomTypeFromStreamPack.Get(stream, buffer); buffer[0] = objType; position++; if (!BssomBinaryPrimitives.TryGetPrimitiveTypeSizeFromStaticTypeSizes(objType, out size)) { switch (objType) { case BssomType.StringCode: size = (int)ReadVariableNumberCore(); break; case BssomType.NativeCode: { ReadStreamToBuffer(1); objType = buffer[position - 1]; if (objType == NativeBssomType.CharCode) { size = BssomBinaryPrimitives.CharSize; } else if (objType == NativeBssomType.DateTimeCode) { size = BssomBinaryPrimitives.NativeDateTimeSize; } else if (objType == NativeBssomType.DecimalCode) { size = BssomBinaryPrimitives.DecimalSize; } else if (objType == NativeBssomType.GuidCode) { size = BssomBinaryPrimitives.GuidSize; } else { throw BssomSerializationOperationException.UnexpectedCodeRead(objType); } break; } case BssomType.Map1: case BssomType.Map2: case BssomType.Array2: size = (int)ReadVariableNumberCore(); break; case BssomType.Array1: { ReadStreamToBuffer(1); if (buffer[position - 1] /*elementType*/ == BssomType.NativeCode) { ReadStreamToBuffer(1); } size = (int)ReadVariableNumberCore(); break; } default: throw BssomSerializationOperationException.UnexpectedCodeRead(objType); } } return(size); }