public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String mname = method.getName();
Class<?>[] classes = method.getParameterTypes();
int largs = classes.length;
Name name = method.getAnnotation(Name.class);
String attr = name != null ? name.value() : deCapitalize(mname.replaceFirst("^[gs]et", ""));
if ("getFieldNames".equals(mname)) {
return JSONObject.getNames(jsonObject);
} else if ("as".equals(mname)) {
Class<? extends JsonBuilder> clz = (Class<? extends JsonBuilder>)args[0];