code: private Object parseBean(int propertyCount, ClassInfo classInfo) {
          String propName = "";
          if (classInfo.metaProperties.length != propertyCount) {
              throw new IllegalArgumentException("Invalid binary data: Expected " + classInfo.metaProperties.length + " properties but was: " + propertyCount);
          }
          try {
              SerDeserializer deser = settings.getDeserializers().findDeserializer(classInfo.type);
              MetaBean metaBean = deser.findMetaBean(classInfo.type);
              BeanBuilder<?> builder = deser.createBuilder(classInfo.type, metaBean);
              for (MetaProperty<?> metaProp : classInfo.metaProperties) {
                  if (metaProp == null) {
                      MsgPackInput.skipObject(input);
                  } else {
                      propName = metaProp.name();
                      Object value = parseObject(SerOptional.extractType(metaProp, classInfo.type), metaProp, classInfo.type, null, false);
                      deser.setValue(builder, metaProp, SerOptional.wrapValue(metaProp, classInfo.type, value));
                  }
                  propName = "";
              }
              return deser.build(classInfo.type, builder);
          } catch (Exception ex) {
              throw new RuntimeException("Error parsing bean: " + classInfo.type.getName() + "::" + propName + ", " + ex.getMessage(), ex);
          }
      }
docs: parses the bean using the class information