@Override
 public Object deserialize(JsonNode n, ObjectMapper mapper) {
   List list = new ArrayList<>();
   for (int i = 0; i < n.size(); i++) {
     try {
       list.add(parent.deserialize(n.get(i), mapper));
     } catch (Exception e) {
       Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, e);
     }
   }
   Collection collection = PersistentVector.create(list);
   return collection;
 }
    @Override
    public Object deserialize(JsonNode n, ObjectMapper mapper) {
      SimpleEvaluationObject o = null;
      try {
        String expression = null, message = null;
        Object status = null, payload = null;
        Integer progressBar = null;

        if (n.has("expression")) expression = n.get("expression").asText();
        if (n.has("message")) message = n.get("message").asText();
        if (n.has("progressBar")) progressBar = n.get("progressBar").asInt();
        if (n.has("payload")) payload = parent.deserialize(n.get("payload"), mapper);

        o = new SimpleEvaluationObject(expression);
        o.message = message;
        o.status = (EvaluationStatus) status;
        o.progressBar = progressBar;
        o.payload = (EvaluationResult) payload;

        if (n.has("outputdata")) {
          JsonNode ne = n.get("outputdata");
          for (JsonNode d : ne) {
            if (!d.has("type") || !d.has("value")) continue;
            if (d.get("type").asText().equals("out")) {
              EvaluationStdOutput e = o.new EvaluationStdOutput(d.get("value").asText());
              o.outputdata.add(e);
            } else {
              EvaluationStdError e = o.new EvaluationStdError(d.get("value").asText());
              o.outputdata.add(e);
            }
          }
        }

      } catch (Exception e) {
        logger.error("exception deserializing SimpleEvaluationObject ", e);
      }
      return o;
    }