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