protected static Object[] ReadValues(IParsingContext context, MemberTypeInfo memberInfo)
 {
     var values = new Object[memberInfo.BinaryTypeEnums.Length];
     for (var i = 0; i < memberInfo.BinaryTypeEnums.Length; ++i) {
         var binaryType = memberInfo.BinaryTypeEnums[i];
         switch (binaryType) {
             case BinaryTypeEnumeration.Object:
             case BinaryTypeEnumeration.ObjectArray:
             case BinaryTypeEnumeration.String:
             case BinaryTypeEnumeration.StringArray:
             case BinaryTypeEnumeration.PrimitiveArray:
             case BinaryTypeEnumeration.Class:
                 values[i] = context.ReadRecord(null);
                 break;
             case BinaryTypeEnumeration.SystemClass:
                 try {
                     values[i] = context.ReadRecord(null);
                     break;
                 } catch (Exception ex) {
                     throw new NotImplementedException("BinaryTypeEnumeration.SystemClass, memberInfo=" + memberInfo, ex);
                 }
             case BinaryTypeEnumeration.Primitive:
                 values[i] = ReadPrimitiveValue(context, (PrimitiveTypeEnumeration)memberInfo.AdditionalInfos[i]);
                 break;
             default:
                 throw new NotSupportedException("Unsupported binary type " + binaryType);
         }
     }
     return values;
 }