Skip to content

Commit 5fd6c4e

Browse files
committed
Call OBJECT_HANDLER for objects without #to_json
as a last-ditch effort.
1 parent d2a22c0 commit 5fd6c4e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

java/src/json/ext/Generator.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,14 @@ void generate(Session session, IRubyObject object, ByteList buffer) {
427427
new Handler<IRubyObject>() {
428428
@Override
429429
RubyString generateNew(Session session, IRubyObject object) {
430-
IRubyObject result =
431-
object.callMethod(session.getContext(), "to_json",
432-
new IRubyObject[] {session.getState()});
433-
if (result instanceof RubyString) return (RubyString)result;
434-
throw session.getRuntime().newTypeError("to_json must return a String");
430+
if (object.respondsTo("to_json")) {
431+
IRubyObject result = object.callMethod(session.getContext(), "to_json",
432+
new IRubyObject[] {session.getState()});
433+
if (result instanceof RubyString) return (RubyString)result;
434+
throw session.getRuntime().newTypeError("to_json must return a String");
435+
} else {
436+
return OBJECT_HANDLER.generateNew(session, object);
437+
}
435438
}
436439

437440
@Override

0 commit comments

Comments
 (0)