docs: @VisibleForTesting
    byte[] getStorageJSON() {
      // TODO - precalculate size
      final ByteArrayOutputStream output = new ByteArrayOutputStream();
      try {
        final JsonGenerator json = JSON.getFactory().createGenerator(output); 
        json.writeStartObject();
        if (tsuid != null && !tsuid.isEmpty()) {
          json.writeStringField("tsuid", tsuid);  
        }
        json.writeNumberField("startTime", start_time);
        json.writeNumberField("endTime", end_time);
        json.writeStringField("description", description);
        json.writeStringField("notes", notes);
        if (custom == null) {
          json.writeNullField("custom");
        } else {
          final TreeMap<String, String> sorted_custom = 
              new TreeMap<String, String>(custom);
          json.writeObjectField("custom", sorted_custom);
        }
        
        json.writeEndObject(); 
        json.close();
        return output.toByteArray();
      } catch (IOException e) {
        throw new RuntimeException("Unable to serialize Annotation", e);
      }
    }