protected void _putObjectField(String name, Object val) { if (name.equals("_transientFields")) return; if (DEBUG) System.out.println("\t put thing : " + name); if (name.equals("$where") && val instanceof String) { _put(CODE, name); _putValueString(val.toString()); return; } val = BSON.applyEncodingHooks(val); if (val == null) putNull(name); else if (val instanceof Date) putDate(name, (Date) val); else if (val instanceof Number) putNumber(name, (Number) val); else if (val instanceof String) putString(name, val.toString()); else if (val instanceof ObjectId) putObjectId(name, (ObjectId) val); else if (val instanceof BSONObject) putObject(name, (BSONObject) val); else if (val instanceof Boolean) putBoolean(name, (Boolean) val); else if (val instanceof Pattern) putPattern(name, (Pattern) val); else if (val instanceof Map) putMap(name, (Map) val); else if (val instanceof Iterable) putIterable(name, (Iterable) val); else if (val instanceof byte[]) putBinary(name, (byte[]) val); else if (val instanceof Binary) putBinary(name, (Binary) val); else if (val instanceof UUID) putUUID(name, (UUID) val); else if (val.getClass().isArray()) putArray(name, val); else if (val instanceof Symbol) { putSymbol(name, (Symbol) val); } else if (val instanceof BSONTimestamp) { putTimestamp(name, (BSONTimestamp) val); } else if (val instanceof CodeWScope) { putCodeWScope(name, (CodeWScope) val); } else if (val instanceof Code) { putCode(name, (Code) val); } else if (putSpecial(name, val)) { // no-op } else { throw new IllegalArgumentException("can't serialize " + val.getClass()); } }