diff --git a/lib/src/credentials.dart b/lib/src/credentials.dart
index 5bbec16..13d3320 100644
--- a/lib/src/credentials.dart
+++ b/lib/src/credentials.dart
@@ -5,7 +5,7 @@
 library credentials;
 
 import 'dart:async';
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:http/http.dart' as http;
 
@@ -80,7 +80,7 @@
 
     var parsed;
     try {
-      parsed = JSON.parse(json);
+      parsed = JSON.decode(json);
     } on FormatException catch (e) {
       validate(false, 'invalid JSON');
     }
@@ -125,7 +125,7 @@
   /// Serializes a set of credentials to JSON. Nothing is guaranteed about the
   /// output except that it's valid JSON and compatible with
   /// [Credentials.toJson].
-  String toJson() => JSON.stringify({
+  String toJson() => JSON.encode({
     'accessToken': accessToken,
     'refreshToken': refreshToken,
     'tokenEndpoint': tokenEndpoint == null ? null : tokenEndpoint.toString(),
diff --git a/lib/src/handle_access_token_response.dart b/lib/src/handle_access_token_response.dart
index c14b8d1..129f259 100644
--- a/lib/src/handle_access_token_response.dart
+++ b/lib/src/handle_access_token_response.dart
@@ -5,7 +5,7 @@
 library handle_access_token_response;
 
 import 'dart:io';
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:http/http.dart' as http;
 
@@ -39,7 +39,7 @@
 
   var parameters;
   try {
-    parameters = JSON.parse(response.body);
+    parameters = JSON.decode(response.body);
   } on FormatException catch (e) {
     validate(false, 'invalid JSON');
   }
@@ -108,7 +108,7 @@
 
   var parameters;
   try {
-    parameters = JSON.parse(response.body);
+    parameters = JSON.decode(response.body);
   } on FormatException catch (e) {
     validate(false, 'invalid JSON');
   }
diff --git a/test/authorization_code_grant_test.dart b/test/authorization_code_grant_test.dart
index 473fee1..85c54e7 100644
--- a/test/authorization_code_grant_test.dart
+++ b/test/authorization_code_grant_test.dart
@@ -5,7 +5,7 @@
 library authorization_code_grant_test;
 
 import 'dart:async';
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:unittest/unittest.dart';
 import 'package:http/http.dart' as http;
@@ -151,7 +151,7 @@
           'client_secret': 'secret'
         }));
 
-        return new Future.value(new http.Response(JSON.stringify({
+        return new Future.value(new http.Response(JSON.encode({
           'access_token': 'access token',
           'token_type': 'bearer',
         }), 200, headers: {'content-type': 'application/json'}));
@@ -195,7 +195,7 @@
           'client_secret': 'secret'
         }));
 
-        return new Future.value(new http.Response(JSON.stringify({
+        return new Future.value(new http.Response(JSON.encode({
           'access_token': 'access token',
           'token_type': 'bearer',
         }), 200, headers: {'content-type': 'application/json'}));
diff --git a/test/client_test.dart b/test/client_test.dart
index 922302d..56dd789 100644
--- a/test/client_test.dart
+++ b/test/client_test.dart
@@ -5,7 +5,7 @@
 library client_test;
 
 import 'dart:async';
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:http/http.dart' as http;
 import 'package:oauth2/oauth2.dart' as oauth2;
@@ -49,7 +49,7 @@
       httpClient.expectRequest((request) {
         expect(request.method, equals('POST'));
         expect(request.url.toString(), equals(tokenEndpoint.toString()));
-        return new Future.value(new http.Response(JSON.stringify({
+        return new Future.value(new http.Response(JSON.encode({
           'access_token': 'new access token',
           'token_type': 'bearer'
         }), 200, headers: {'content-type': 'application/json'}));
@@ -99,7 +99,7 @@
       httpClient.expectRequest((request) {
         expect(request.method, equals('POST'));
         expect(request.url.toString(), equals(tokenEndpoint.toString()));
-        return new Future.value(new http.Response(JSON.stringify({
+        return new Future.value(new http.Response(JSON.encode({
           'access_token': 'new access token',
           'token_type': 'bearer'
         }), 200, headers: {'content-type': 'application/json'}));
diff --git a/test/credentials_test.dart b/test/credentials_test.dart
index 6a873f2..f3e303b 100644
--- a/test/credentials_test.dart
+++ b/test/credentials_test.dart
@@ -5,7 +5,7 @@
 library credentials_test;
 
 import 'dart:async';
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:http/http.dart' as http;
 import 'package:oauth2/oauth2.dart' as oauth2;
@@ -74,7 +74,7 @@
         "client_secret": "secret"
       }));
 
-      return new Future.value(new http.Response(JSON.stringify({
+      return new Future.value(new http.Response(JSON.encode({
         'access_token': 'new access token',
         'token_type': 'bearer',
         'refresh_token': 'new refresh token'
@@ -104,7 +104,7 @@
         "client_secret": "secret"
       }));
 
-      return new Future.value(new http.Response(JSON.stringify({
+      return new Future.value(new http.Response(JSON.encode({
         'access_token': 'new access token',
         'token_type': 'bearer'
       }), 200, headers: {'content-type': 'application/json'}));
@@ -120,7 +120,7 @@
 
   group("fromJson", () {
     oauth2.Credentials fromMap(Map map) =>
-      new oauth2.Credentials.fromJson(JSON.stringify(map));
+      new oauth2.Credentials.fromJson(JSON.encode(map));
 
     test("should load the same credentials from toJson", () {
       var expiration = new DateTime.now().subtract(new Duration(hours: 1));
diff --git a/test/handle_access_token_response_test.dart b/test/handle_access_token_response_test.dart
index 10e6f75..a99d8ea 100644
--- a/test/handle_access_token_response_test.dart
+++ b/test/handle_access_token_response_test.dart
@@ -4,7 +4,7 @@
 
 library handle_access_token_response_test;
 
-import 'dart:json' as JSON;
+import 'dart:convert';
 
 import 'package:http/http.dart' as http;
 import 'package:oauth2/oauth2.dart' as oauth2;
@@ -70,28 +70,28 @@
     });
 
     test('with a non-string error_description causes a FormatException', () {
-      expect(() => handleError(body: JSON.stringify({
+      expect(() => handleError(body: JSON.encode({
         "error": "invalid_request",
         "error_description": 12
       })), throwsFormatException);
     });
 
     test('with a non-string error_uri causes a FormatException', () {
-      expect(() => handleError(body: JSON.stringify({
+      expect(() => handleError(body: JSON.encode({
         "error": "invalid_request",
         "error_uri": 12
       })), throwsFormatException);
     });
 
     test('with a string error_description causes a AuthorizationException', () {
-      expect(() => handleError(body: JSON.stringify({
+      expect(() => handleError(body: JSON.encode({
         "error": "invalid_request",
         "error_description": "description"
       })), throwsAuthorizationException);
     });
 
     test('with a string error_uri causes a AuthorizationException', () {
-      expect(() => handleError(body: JSON.stringify({
+      expect(() => handleError(body: JSON.encode({
         "error": "invalid_request",
         "error_uri": "http://example.com/error"
       })), throwsAuthorizationException);
@@ -106,7 +106,7 @@
          expiresIn,
          refreshToken,
          scope}) {
-      return handle(new http.Response(JSON.stringify({
+      return handle(new http.Response(JSON.encode({
         'access_token': accessToken,
         'token_type': tokenType,
         'expires_in': expiresIn,
