docs: private void _serializeComponent(Component c, StringBuilder sb, Set<Object> done) throws ConverterException {
  
  	ComponentSpecificAccess cw = new ComponentSpecificAccess(Component.ACCESS_PRIVATE, c);
  
  	sb.append(goIn());
  	try {
  	    sb.append("evaluateComponent(").append(QUOTE_CHR).append(c.getAbsName()).append(QUOTE_CHR).append(',').append(QUOTE_CHR).append(ComponentUtil.md5(c)).append(QUOTE_CHR)
  		    .append(",{");
  	}
  	catch (Exception e) {
  	    throw toConverterException(e);
  	}
  
  	boolean doIt = false;
  	Object member;
  	{
  
  	    Iterator<Entry<Key, Object>> it = cw.entryIterator();
  	    deep++;
  	    Entry<Key, Object> e;
  	    while (it.hasNext()) {
  		e = it.next();
  		member = e.getValue();
  		if (member instanceof UDF) continue;
  		if (doIt) sb.append(',');
  		doIt = true;
  		sb.append(QUOTE_CHR);
  		sb.append(escape(e.getKey().getString()));
  		sb.append(QUOTE_CHR);
  		sb.append(':');
  		_serialize(member, sb, done);
  	    }
  	    sb.append("}");
  	    deep--;
  	}
  	{
  	    boolean isPeristent = c.isPersistent();
  
  	    ComponentScope scope = c.getComponentScope();
  	    Iterator<Entry<Key, Object>> it = scope.entryIterator();
  	    sb.append(",{");
  	    deep++;
  	    doIt = false;
  	    Property p;
  	    Boolean remotingFetch;
  	    Struct props = ignoreRemotingFetch ? null : ComponentUtil.getPropertiesAsStruct(c, false);
  	    Entry<Key, Object> e;
  	    Key k;
  	    while (it.hasNext()) {
  		e = it.next();
  		k = e.getKey();
  		// String key=Caster.toString(it.next(),"");
  		if (KeyConstants._THIS.equalsIgnoreCase(k)) continue;
  		if (!ignoreRemotingFetch) {
  		    p = (Property) props.get(k, null);
  		    if (p != null) {
  			remotingFetch = Caster.toBoolean(p.getDynamicAttributes().get(REMOTING_FETCH, null), null);
  			if (remotingFetch == null) {
  			    if (isPeristent && ORMUtil.isRelated(p)) continue;
  			}
  			else if (!remotingFetch.booleanValue()) continue;
  		    }
  		}
  
  		member = e.getValue();
  		if (member instanceof UDF) continue;
  		if (doIt) sb.append(',');
  		doIt = true;
  		sb.append(QUOTE_CHR);
  		sb.append(escape(k.getString()));
  		sb.append(QUOTE_CHR);
  		sb.append(':');
  		_serialize(member, sb, done);
  	    }
  	    sb.append("}");
  	    deep--;
  	}
  
  	sb.append(")");
  	// sb.append("");
  	// throw new ConverterException("can't serialize a component "+component.getDisplayName());
      }