void parseFields()
   {
      int ndx = 0;
      for (Field field : actualClass.getDeclaredFields()) {
         if (!Modifier.isStatic(field.getModifiers())) {
            JsonProperty jsonProperty = field.getAnnotation(JsonProperty.class);
            int hash = (jsonProperty != null ? jsonProperty.name().hashCode() : field.getName().hashCode());
            fieldHashes[ndx] = hash;
            ndx++;
         }
      }

      Arrays.sort(fieldHashes);
      for (Field field : actualClass.getDeclaredFields()) {
         if (!Modifier.isStatic(field.getModifiers())) {
            JsonProperty jsonProperty = field.getAnnotation(JsonProperty.class);
            int hash = (jsonProperty != null ? jsonProperty.name().hashCode() : field.getName().hashCode());
            boolean excluded = (jsonProperty != null && jsonProperty.exclude());

            Phield phield = new Phield(field, excluded);

            // Hash slot
            int slot = (hash & quickLookup.length - 1);
            for (int i = 0; i < fieldHashes.length; i++) {

               if (fieldHashes[i] == hash) {
                  fields[i] = phield;
                  quickLookup[slot] = i + 1;
                  break;
               }
            }
         }
      }
   }