@Override
  public JsonElement serialize(RemoteClass src, Type typeOfSrc, JsonSerializationContext context) {

    JsonObject object = new JsonObject();

    if (src.getName() != null) {
      object.addProperty("name", src.getName());
    }

    if (src.getDoc() != null) {
      object.addProperty("doc", src.getDoc());
    }

    if (src.isAbstract()) {
      object.add("abstract", new JsonPrimitive(true));
    }

    if (src.getExtends() != null) {
      object.add("extends", context.serialize(src.getExtends()));
    }

    if (src.getConstructor() != null) {
      object.add("constructor", context.serialize(src.getConstructor()));
    }

    if (!src.getProperties().isEmpty()) {
      object.add("properties", context.serialize(src.getProperties()));
    }

    if (!src.getMethods().isEmpty()) {
      object.add("methods", context.serialize(src.getMethods()));
    }

    if (!src.getEvents().isEmpty()) {
      object.add("events", context.serialize(src.getEvents()));
    }

    return object;
  }