You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/02/05 18:45:59 UTC

[juneau] branch master updated: Tests (mostly).

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 454e307  Tests (mostly).
454e307 is described below

commit 454e307bffe88cac7efd5088800760273437ec8f
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Fri Feb 5 13:38:20 2021 -0500

    Tests (mostly).
---
 .../main/ConfigurablePropertyCodeGenerator.java    |   4 +
 .../java/org/apache/juneau/AnnotationsTest.java    |   2 +-
 .../java/org/apache/juneau/BasicBeanTests.java     |  12 +-
 .../test/java/org/apache/juneau/BeanMapTest.java   |  12 +-
 .../java/org/apache/juneau/ComboRoundTripTest.java |   4 +-
 .../java/org/apache/juneau/ComboSerializeTest.java |   2 +-
 .../java/org/apache/juneau/ContextCacheTest.java   |  30 +-
 .../java/org/apache/juneau/IgnoredClassesTest.java |   2 +-
 .../src/test/java/org/apache/juneau/OListTest.java |  10 +-
 .../src/test/java/org/apache/juneau/OMapTest.java  |  14 +-
 .../java/org/apache/juneau/PojoExamplesTest.java   |  26 +-
 .../java/org/apache/juneau/PropertyStoreTest.java  | 280 ++++----
 .../apache/juneau/ReadWriteOnlyPropertiesTest.java |  14 +-
 .../a/rttests/RoundTripBeanInheritanceTest.java    |   4 +-
 .../juneau/a/rttests/RoundTripBeanMapsTest.java    |  32 +-
 .../juneau/a/rttests/RoundTripClassesTest.java     |   6 +-
 .../apache/juneau/a/rttests/RoundTripDTOsTest.java |   4 +-
 .../apache/juneau/a/rttests/RoundTripEnumTest.java |  14 +-
 .../juneau/a/rttests/RoundTripGenericsTest.java    |   4 +-
 .../a/rttests/RoundTripObjectsAsStringsTest.java   |   6 +-
 .../RoundTripObjectsWithSpecialMethodsTest.java    |   2 +-
 .../a/rttests/RoundTripTransformBeansTest.java     |  10 +-
 .../juneau/a/rttests/RoundTripTrimStringsTest.java |  16 +-
 .../a/rttests/RountTripBeansWithBuilders.java      |   8 +-
 .../juneau/annotation/BeanAnnotation_Test.java     |   6 +-
 .../annotation/BeanIgnoreAnnotation_Test.java      |  12 +-
 .../apache/juneau/annotation/BeanIgnore_Test.java  |   8 +-
 .../juneau/annotation/BeancAnnotation_Test.java    |   6 +-
 .../juneau/annotation/BeanpAnnotation_Test.java    |   8 +-
 .../juneau/annotation/ExampleAnnotation_Test.java  |  10 +-
 .../annotation/MarshalledAnnotation_Test.java      |   6 +-
 .../annotation/NamePropertyAnnotation_Test.java    |   8 +-
 .../annotation/ParentPropertyAnnotation_Test.java  |   8 +-
 .../juneau/annotation/SwapAnnotation_Test.java     |  10 +-
 .../juneau/annotation/UriAnnotation_Test.java      |  10 +-
 .../juneau/assertions/ArrayAssertion_Test.java     |  15 +-
 .../apache/juneau/assertions/Assertions_Test.java  |  42 +-
 .../BeanAssertion_Test.java}                       |  47 +-
 ...ertion_Test.java => BooleanAssertion_Test.java} |  43 +-
 .../juneau/assertions/ByteArrayAssertion_Test.java |  32 +-
 .../assertions/CollectionAssertion_Test.java       |   5 +
 ...ertion_Test.java => IntegerAssertion_Test.java} |   4 +-
 ...Assertion_Test.java => LongAssertion_Test.java} |   8 +-
 ...nAssertion_Test.java => MapAssertion_Test.java} |  47 +-
 .../juneau/assertions/ObjectAssertion_Test.java    |  61 +-
 .../juneau/assertions/StringAssertion_Test.java    |  50 +-
 .../assertions/ZonedDateTimeAssertion_Test.java    |  82 +++
 .../apache/juneau/config/ConfigBuilderTest.java    |   4 +-
 .../apache/juneau/config/ConfigInterfaceTest.java  |  80 +--
 .../juneau/config/ConfigMapListenerTest.java       |  30 +-
 .../java/org/apache/juneau/config/ConfigTest.java  | 258 ++++----
 .../java/org/apache/juneau/cp/FileFinder_Test.java | 450 ++++++-------
 .../java/org/apache/juneau/cp/Messages_Test.java   |   4 +-
 .../juneau/csv/annotation/CsvAnnotation_Test.java  |  10 +-
 .../java/org/apache/juneau/dto/atom/AtomTest.java  |   8 +-
 .../apache/juneau/dto/swagger/Contact_Test.java    |  16 +-
 .../dto/swagger/ExternalDocumentation_Test.java    |  16 +-
 .../apache/juneau/dto/swagger/HeaderInfo_Test.java |  46 +-
 .../org/apache/juneau/dto/swagger/Info_Test.java   |  24 +-
 .../org/apache/juneau/dto/swagger/Items_Test.java  |  34 +-
 .../apache/juneau/dto/swagger/License_Test.java    |  22 +-
 .../apache/juneau/dto/swagger/Operation_Test.java  |  92 +--
 .../juneau/dto/swagger/ParameterInfo_Test.java     |  36 +-
 .../juneau/dto/swagger/ResponseInfo_Test.java      |  42 +-
 .../apache/juneau/dto/swagger/SchemaInfo_Test.java |  66 +-
 .../juneau/dto/swagger/SecurityScheme_Test.java    |  26 +-
 .../juneau/dto/swagger/SwaggerBuilder_Test.java    |  62 +-
 .../apache/juneau/dto/swagger/Swagger_Test.java    | 136 ++--
 .../org/apache/juneau/dto/swagger/Tag_Test.java    |  20 +-
 .../org/apache/juneau/dto/swagger/Xml_Test.java    |  16 +-
 .../apache/juneau/encoders/EncoderGroupTest.java   |   6 +-
 .../java/org/apache/juneau/html/Common_Test.java   |  10 +-
 .../html/annotation/HtmlAnnotation_Test.java       |  10 +-
 .../html/annotation/HtmlLinkAnnotation_Test.java   |   6 +-
 .../org/apache/juneau/http/BasicHeader_Test.java   |  22 +-
 .../apache/juneau/http/BasicHttpEntity_Test.java   |  52 +-
 .../apache/juneau/http/BasicHttpResource_Test.java |  44 +-
 .../juneau/http/BasicNameValuePair_Test.java       |  22 +-
 .../apache/juneau/http/HeaderSupplier_Test.java    |  30 +-
 .../org/apache/juneau/http/MediaRanges_Test.java   |  42 +-
 .../org/apache/juneau/http/MediaType_Test.java     |   4 +-
 .../juneau/http/NameValuePairSupplier_Test.java    |  30 +-
 .../juneau/http/SerializedHttpEntity_Test.java     |   6 +-
 .../org/apache/juneau/http/StringRange_Test.java   |   6 +-
 .../org/apache/juneau/http/StringRanges_Test.java  |   4 +-
 .../http/annotation/AnnotationUtils_Test.java      |  62 +-
 .../http/annotation/BodyAnnotation_Test.java       |   8 +-
 .../http/annotation/ContactAnnotation_Test.java    |   2 +-
 .../http/annotation/FormDataAnnotation_Test.java   |  10 +-
 .../annotation/HasFormDataAnnotation_Test.java     |   2 +-
 .../http/annotation/HasQueryAnnotation_Test.java   |   2 +-
 .../http/annotation/HeaderAnnotation_Test.java     |  10 +-
 .../http/annotation/LicenseAnnotation_Test.java    |   2 +-
 .../http/annotation/PathAnnotation_Test.java       |  10 +-
 .../http/annotation/QueryAnnotation_Test.java      |  10 +-
 .../http/annotation/RequestAnnotation_Test.java    |   6 +-
 .../http/annotation/ResponseAnnotation_Test.java   |   8 +-
 .../annotation/ResponseBodyAnnotation_Test.java    |   8 +-
 .../annotation/ResponseHeaderAnnotation_Test.java  |   8 +-
 .../annotation/ResponseStatusAnnotation_Test.java  |   8 +-
 .../juneau/http/annotation/TagAnnotation_Test.java |   2 +-
 .../org/apache/juneau/http/header/Accept_Test.java |   2 +-
 .../juneau/http/header/BasicDateHeader_Test.java   |   6 +-
 .../header/BasicMediaRangeArrayHeader_Test.java    |   4 +-
 .../http/header/BasicMediaTypeHeader_Test.java     |   8 +-
 .../header/BasicStringRangeArrayHeader_Test.java   |   2 +-
 .../juneau/http/remote/RrpcInterfaceTest.java      | 224 +++----
 .../juneau/httppart/HttpPartSchema_Body_Test.java  |   8 +-
 .../httppart/HttpPartSchema_FormData_Test.java     |  14 +-
 .../httppart/HttpPartSchema_Header_Test.java       |  14 +-
 .../juneau/httppart/HttpPartSchema_Path_Test.java  |  14 +-
 .../juneau/httppart/HttpPartSchema_Query_Test.java |  14 +-
 .../HttpPartSchema_ResponseHeader_Test.java        |  14 +-
 .../httppart/HttpPartSchema_Response_Test.java     |   8 +-
 .../juneau/httppart/OpenApiPartParser_Test.java    | 710 ++++++++++-----------
 .../java/org/apache/juneau/jena/CommonTest.java    |  14 +-
 .../java/org/apache/juneau/jena/CommonXmlTest.java |   4 +-
 .../java/org/apache/juneau/jena/RdfParserTest.java |   2 +-
 .../test/java/org/apache/juneau/jena/RdfTest.java  |  16 +-
 .../juneau/jena/annotation/RdfAnnotation_Test.java |  10 +-
 .../juneau/jso/annotation/JsoAnnotation_Test.java  |  10 +-
 .../java/org/apache/juneau/json/CommonTest.java    |  10 +-
 .../org/apache/juneau/json/JsonParserTest.java     |  10 +-
 .../test/java/org/apache/juneau/json/JsonTest.java |   2 +-
 .../json/annotation/JsonAnnotation_Test.java       |  10 +-
 .../juneau/jsonschema/JsonSchemaGeneratorTest.java | 670 +++++++++----------
 .../annotation/ExternalDocsAnnotation_Test.java    |   2 +-
 .../annotation/ItemsAnnotation_Test.java           |   2 +-
 .../annotation/SchemaAnnotation_Test.java          |  10 +-
 .../annotation/SubItemsAnnotation_Test.java        |   2 +-
 .../java/org/apache/juneau/marshall/HtmlTest.java  |   2 +-
 .../java/org/apache/juneau/marshall/JsonTest.java  |   2 +-
 .../org/apache/juneau/marshall/MsgPackTest.java    |   2 +-
 .../org/apache/juneau/marshall/SimpleJsonTest.java |   2 +-
 .../java/org/apache/juneau/marshall/UonTest.java   |   2 +-
 .../apache/juneau/marshall/UrlEncodingTest.java    |   2 +-
 .../java/org/apache/juneau/marshall/XmlTest.java   |   2 +-
 .../apache/juneau/msgpack/MsgPackParserTest.java   |  50 +-
 .../msgpack/annotation/MsgPackAnnotation_Test.java |  10 +-
 .../apache/juneau/mstat/MethodExecStore_Test.java  | 193 ++++++
 .../org/apache/juneau/mstat/ThrownStore_Test.java  | 386 +++++++++++
 .../java/org/apache/juneau/oapi/OpenApiTest.java   |  62 +-
 .../oapi/annotation/OpenApiAnnotation_Test.java    |  10 +-
 .../org/apache/juneau/parser/ParserGroupTest.java  |   6 +-
 .../annotation/PlainTextAnnotation_Test.java       |  10 +-
 .../apache/juneau/pojotools/PojoSearcherTest.java  | 236 +++----
 .../apache/juneau/pojotools/PojoSorterTest.java    |  46 +-
 .../apache/juneau/pojotools/PojoViewerTest.java    |  74 +--
 .../juneau/serializer/SerializerGroupTest.java     |   6 +-
 .../juneau/serializer/UriResolutionTest.java       |   2 +-
 .../soap/annotation/SoapXmlAnnotation_Test.java    |  10 +-
 .../org/apache/juneau/svl/ResolvingOMapTest.java   |  26 +-
 .../apache/juneau/transform/AutoListSwapTest.java  |  12 +-
 .../apache/juneau/transform/AutoMapSwapTest.java   |  12 +-
 .../juneau/transform/AutoNumberSwapTest.java       |  78 +--
 .../juneau/transform/AutoObjectSwapTest.java       |  12 +-
 .../apache/juneau/transforms/BeanFilterTest.java   |   8 +-
 .../java/org/apache/juneau/uon/Common_UonTest.java |  10 +-
 .../java/org/apache/juneau/uon/UonParserTest.java  |  10 +-
 .../juneau/uon/annotation/UonAnnotation_Test.java  |  10 +-
 .../urlencoding/CommonParser_UrlEncodingTest.java  |   2 +-
 .../juneau/urlencoding/Common_UrlEncodingTest.java |  10 +-
 .../juneau/urlencoding/UrlEncodingParserTest.java  |  42 +-
 .../annotation/UrlEncodingAnnotation_Test.java     |  10 +-
 .../org/apache/juneau/utils/ArrayUtilsTest.java    |  56 +-
 .../org/apache/juneau/utils/FilteredMapTest.java   |   4 +-
 .../org/apache/juneau/utils/MethodInvokerTest.java |  29 +-
 .../org/apache/juneau/utils/MultiIterableTest.java |  10 +-
 .../java/org/apache/juneau/utils/MultiSetTest.java |  14 +-
 .../org/apache/juneau/utils/PojoQueryTest.java     |  28 +-
 .../org/apache/juneau/utils/ReflectionMapTest.java |  18 +-
 .../org/apache/juneau/utils/SimpleMapTest.java     |   8 +-
 .../apache/juneau/utils/StackTraceStoreTest.java   | 238 -------
 .../org/apache/juneau/utils/StringUtilsTest.java   |  90 +--
 .../java/org/apache/juneau/xml/CommonTest.java     |  10 +-
 .../org/apache/juneau/xml/XmlCollapsedTest.java    |  10 +-
 .../java/org/apache/juneau/xml/XmlContentTest.java |  44 +-
 .../apache/juneau/xml/XmlIgnoreCommentsTest.java   |   8 +-
 .../juneau/xml/annotation/XmlAnnotation_Test.java  |  10 +-
 .../src/main/java/org/apache/juneau/BeanMap.java   |  14 +-
 .../org/apache/juneau/assertions/Assertions.java   | 100 ++-
 .../{ObjectAssertion.java => BeanAssertion.java}   |  26 +-
 .../juneau/assertions/ByteArrayAssertion.java      |   2 +-
 .../juneau/assertions/FluentArrayAssertion.java    |   7 +-
 ...LongAssertion.java => FluentBeanAssertion.java} |  64 +-
 .../assertions/FluentByteArrayAssertion.java       |  18 +-
 .../assertions/FluentCollectionAssertion.java      |   4 +-
 .../juneau/assertions/FluentLongAssertion.java     |   3 +-
 ...ctionAssertion.java => FluentMapAssertion.java} |  68 +-
 .../juneau/assertions/FluentObjectAssertion.java   | 174 ++++-
 .../juneau/assertions/FluentStringAssertion.java   |  18 +-
 .../MapAssertion.java}                             |  85 +--
 .../apache/juneau/assertions/ObjectAssertion.java  |   2 +-
 .../java/org/apache/juneau/cp/BeanFactory.java     |  35 +-
 .../org/apache/juneau/cp/BeanFactoryBuilder.java}  |  45 +-
 .../apache/juneau/internal/CollectionUtils.java    |  74 +++
 .../org/apache/juneau/mstat/ExceptionInfo.java     | 141 ----
 .../org/apache/juneau/mstat/ExceptionStats.java    | 128 ----
 .../org/apache/juneau/mstat/ExceptionStore.java    | 136 ----
 .../org/apache/juneau/mstat/MethodExecStats.java   |  78 ++-
 .../juneau/mstat/MethodExecStatsBuilder.java       | 107 ++++
 .../org/apache/juneau/mstat/MethodExecStore.java   | 105 +++
 .../juneau/mstat/MethodExecStoreBuilder.java       | 112 ++++
 .../java/org/apache/juneau/mstat/ThrownStats.java  | 187 ++++++
 .../apache/juneau/mstat/ThrownStatsBuilder.java    | 133 ++++
 .../java/org/apache/juneau/mstat/ThrownStore.java  | 225 +++++++
 .../apache/juneau/mstat/ThrownStoreBuilder.java    | 128 ++++
 .../org/apache/juneau/utils/MethodInvoker.java     |   9 +
 .../org/apache/juneau/utils/StackTraceInfo.java    |  96 ---
 .../org/apache/juneau/utils/StackTraceStore.java   | 122 ----
 .../org/apache/juneau/rest/test/ConfigTest.java    |   2 +-
 .../rest/test/client/ThirdPartyProxyResource.java  | 306 ++++-----
 .../rest/test/client/ThirdPartyProxyTest.java      |  80 +--
 .../juneau/rest/client/RestClient_Body_Test.java   |  18 +-
 .../client/RestClient_Config_RestClient_Test.java  |  32 +-
 .../rest/client/RestClient_Logging_Test.java       |   8 +-
 .../rest/client/RestClient_Response_Body_Test.java |  44 +-
 .../client/RestClient_Response_Headers_Test.java   |  12 +-
 .../rest/client/RestClient_Response_Test.java      |   4 +-
 .../java/org/apache/juneau/rest/Swagger_Test.java  | 504 +++++++--------
 .../rest/annotation/OpSwaggerAnnotation_Test.java  |   2 +-
 .../rest/annotation/RestAnnotation_Test.java       |   6 +-
 .../rest/annotation/RestHookAnnotation_Test.java   |   4 +-
 .../rest/annotation/RestOpAnnotation_Test.java     |   4 +-
 .../rest/annotation/SwaggerAnnotation_Test.java    |   2 +-
 .../juneau/rest/annotation/Swagger_Body_Test.java  |  60 +-
 .../rest/annotation/Swagger_FormData_Test.java     |  20 +-
 .../rest/annotation/Swagger_Header_Test.java       |  26 +-
 .../juneau/rest/annotation/Swagger_Path_Test.java  |  40 +-
 .../juneau/rest/annotation/Swagger_Query_Test.java |  10 +-
 .../rest/annotation/Swagger_Response_Test.java     |  86 +--
 .../rest/annotation/Swagger_RestOp_Parameters.java |  54 +-
 .../juneau/rest/mock2/MockServletRequest_Test.java |  16 +-
 .../apache/juneau/rest/util/RestUtils_Test.java    |   2 +-
 .../juneau/rest/util/UrlPathMatcher_Test.java      |   4 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 125 +++-
 .../juneau/rest/logging/BasicRestLogger.java       |  19 +-
 .../juneau/rest/logging/BasicTestRestLogger.java   |   2 +-
 .../juneau/rest/logging/RestLoggerBuilder.java     |  10 +-
 239 files changed, 5976 insertions(+), 4718 deletions(-)

diff --git a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
index 893a45b..e16cf75 100644
--- a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
+++ b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
@@ -178,6 +178,8 @@ public class ConfigurablePropertyCodeGenerator {
 		FluentListAssertion.class,
 		FluentZonedDateTimeAssertion.class,
 		FluentBooleanAssertion.class,
+		FluentBeanAssertion.class,
+		FluentMapAssertion.class,
 
 		DateAssertion.class,
 		IntegerAssertion.class,
@@ -191,6 +193,8 @@ public class ConfigurablePropertyCodeGenerator {
 		ListAssertion.class,
 		ZonedDateTimeAssertion.class,
 		BooleanAssertion.class,
+		BeanAssertion.class,
+		MapAssertion.class,
 
 		BasicHeader.class,
 		BasicNameValuePair.class,
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/AnnotationsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
index 26882a1..0bb60ff 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
@@ -165,7 +165,7 @@ public class AnnotationsTest {
 		bm = session.newBeanMap(A.class).load("{publicField:123}");
 		assertNotNull("F1", bm);
 		assertNotNull("F2", bm.getBean());
-		assertObject(bm.getBean()).json().is("{publicField:123}");
+		assertObject(bm.getBean()).asJson().is("{publicField:123}");
 	}
 
 	public static class A {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BasicBeanTests.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
index 5970f7d..3ed78ed 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
@@ -46,19 +46,19 @@ public class BasicBeanTests {
 
 	@Test
 	public void a01_testTransientFieldsIgnored() {
-		assertObject(A1.create()).json().is("{f1:1}");
+		assertObject(A1.create()).asJson().is("{f1:1}");
 	}
 
 	@Test
 	public void a02_testTransientFieldsIgnored_overrideSetting() {
 		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().disableIgnoreTransientFields().build();
-		assertObject(A1.create()).serialized(s).is("{f1:1,f2:2}");
+		assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
 	}
 
 	@Test
 	public void a03_testTransientFieldsIgnored_overrideAnnotation() {
 		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(A.class).build();
-		assertObject(A1.create()).serialized(s).is("{f1:1,f2:2}");
+		assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
 	}
 
 	public static class A2 {
@@ -85,7 +85,7 @@ public class BasicBeanTests {
 
 	@Test
 	public void a04_testTransientMethodsIgnored() {
-		assertObject(A2.create()).json().is("{f1:1}");
+		assertObject(A2.create()).asJson().is("{f1:1}");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
@@ -105,9 +105,9 @@ public class BasicBeanTests {
 
 	@Test
 	public void b01_beanWithDynaProperty() throws Exception {
-		assertObject(B.create()).json().is("{a:1}");
+		assertObject(B.create()).asJson().is("{a:1}");
 
 		B b = JsonParser.DEFAULT.parse("{a:1}", B.class);
-		assertObject(b).json().is("{a:1}");
+		assertObject(b).asJson().is("{a:1}");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
index d54ecdf..80fe468 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanMapTest.java
@@ -1162,7 +1162,7 @@ public class BeanMapTest {
 		m.put("f2", 2);
 		m.put("f3", 3);
 
-		assertObject(m).jsonSorted().is("{f1:1,f2:2,f3:0}");
+		assertObject(m).asJsonSorted().is("{f1:1,f2:2,f3:0}");
 	}
 
 	public static class Q1 {}
@@ -1891,8 +1891,8 @@ public class BeanMapTest {
 	//====================================================================================================
 	@Test
 	public void testBeanPropertyOrder() throws Exception {
-		assertObject(new V2()).json().is("{a1:'1',a2:'2',a3:'3',a4:'4'}");
-		assertObject(new V3()).json().is("{a3:'3',a4:'4',a5:'5',a6:'6'}");
+		assertObject(new V2()).asJson().is("{a1:'1',a2:'2',a3:'3',a4:'4'}");
+		assertObject(new V3()).asJson().is("{a3:'3',a4:'4',a5:'5',a6:'6'}");
 	}
 
 	public static class V {
@@ -1938,8 +1938,8 @@ public class BeanMapTest {
 	//====================================================================================================
 	@Test
 	public void testBeanMethodOrder() throws Exception {
-		assertObject(new W2()).jsonSorted().is("{a1:'1',a2:'2',a3:'3',a4:'4'}");
-		assertObject(new W3()).jsonSorted().is("{a3:'3',a4:'4',a5:'5',a6:'6'}");
+		assertObject(new W2()).asJsonSorted().is("{a1:'1',a2:'2',a3:'3',a4:'4'}");
+		assertObject(new W3()).asJsonSorted().is("{a3:'3',a4:'4',a5:'5',a6:'6'}");
 	}
 
 	public static class W {
@@ -2076,7 +2076,7 @@ public class BeanMapTest {
 		BeanMap<AA> bm = BeanContext.DEFAULT.createSession().toBeanMap(aa);
 
 		bm.put("a", AList.of("x"));
-		assertObject(aa.a).json().is("['x']");
+		assertObject(aa.a).asJson().is("['x']");
 	}
 
 	public static class AA {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
index 5a6a2a2..0883388 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
@@ -116,7 +116,7 @@ public abstract class ComboRoundTripTest {
 
 			if (isRdf) {
 				Object[] args = { comboInput.label, testName };
-				assertString(r).msg("{0}/{1} parse-normal failed", args).isEqualSortedLines(expected);
+				assertString(r).msg("{0}/{1} parse-normal failed", args).isEqualSortedLinesTo(expected);
 			} else
 				assertString(r).msg("{0}/{1} parse-normal failed", comboInput.label, testName).is(expected);
 
@@ -160,7 +160,7 @@ public abstract class ComboRoundTripTest {
 
 			if (isRdf) {
 				Object[] args = { comboInput.label, testName };
-				assertString(r).msg("{0}/{1} parse-normal failed", args).isEqualSortedLines(expected);
+				assertString(r).msg("{0}/{1} parse-normal failed", args).isEqualSortedLinesTo(expected);
 			} else
 				assertString(r).msg("{0}/{1} parse-normal failed", comboInput.label, testName).is(expected);
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
index 6ac0e0c..6029295 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
@@ -96,7 +96,7 @@ public abstract class ComboSerializeTest {
 
 			if (isRdf) {
 				Object[] args = { comboInput.label, testName };
-				assertString(r).msg("{0}/{1} serialize-normal failed: <<<MSG>>>", args).isEqualSortedLines(expected);
+				assertString(r).msg("{0}/{1} serialize-normal failed: <<<MSG>>>", args).isEqualSortedLinesTo(expected);
 			} else
 				assertString(r).msg("{0}/{1} parse-normal failed: <<<MSG>>>", comboInput.label, testName).is(expected);
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ContextCacheTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
index 4eed4a0..c700664 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
@@ -40,9 +40,9 @@ public class ContextCacheTest {
 		B b = ContextCache.INSTANCE.create(B.class, ps);
 		C c = ContextCache.INSTANCE.create(C.class, ps);
 
-		assertObject(a).json().is("{f1:'xxx'}");
-		assertObject(b).json().is("{f1:'xxx',f2:-1}");
-		assertObject(c).json().is("{f1:'xxx',f2:-1,f3:false}");
+		assertObject(a).asJson().is("{f1:'xxx'}");
+		assertObject(b).asJson().is("{f1:'xxx',f2:-1}");
+		assertObject(c).asJson().is("{f1:'xxx',f2:-1,f3:false}");
 
 		A a2 = ContextCache.INSTANCE.create(A.class, ps);
 		B b2 = ContextCache.INSTANCE.create(B.class, ps);
@@ -59,9 +59,9 @@ public class ContextCacheTest {
 		b2 = ContextCache.INSTANCE.create(B.class, ps);
 		c2 = ContextCache.INSTANCE.create(C.class, ps);
 
-		assertObject(a2).json().is("{f1:'foo'}");
-		assertObject(b2).json().is("{f1:'foo',f2:-1}");
-		assertObject(c2).json().is("{f1:'foo',f2:-1,f3:false}");
+		assertObject(a2).asJson().is("{f1:'foo'}");
+		assertObject(b2).asJson().is("{f1:'foo',f2:-1}");
+		assertObject(c2).asJson().is("{f1:'foo',f2:-1,f3:false}");
 
 		assertTrue(a != a2);
 		assertTrue(b != b2);
@@ -75,9 +75,9 @@ public class ContextCacheTest {
 		b2 = ContextCache.INSTANCE.create(B.class, ps);
 		c2 = ContextCache.INSTANCE.create(C.class, ps);
 
-		assertObject(a2).json().is("{f1:'foo'}");
-		assertObject(b2).json().is("{f1:'foo',f2:123}");
-		assertObject(c2).json().is("{f1:'foo',f2:123,f3:false}");
+		assertObject(a2).asJson().is("{f1:'foo'}");
+		assertObject(b2).asJson().is("{f1:'foo',f2:123}");
+		assertObject(c2).asJson().is("{f1:'foo',f2:123,f3:false}");
 
 		assertTrue(a == a2);
 		assertTrue(b != b2);
@@ -91,9 +91,9 @@ public class ContextCacheTest {
 		b2 = ContextCache.INSTANCE.create(B.class, ps);
 		c2 = ContextCache.INSTANCE.create(C.class, ps);
 
-		assertObject(a2).json().is("{f1:'foo'}");
-		assertObject(b2).json().is("{f1:'foo',f2:123}");
-		assertObject(c2).json().is("{f1:'foo',f2:123,f3:true}");
+		assertObject(a2).asJson().is("{f1:'foo'}");
+		assertObject(b2).asJson().is("{f1:'foo',f2:123}");
+		assertObject(c2).asJson().is("{f1:'foo',f2:123,f3:true}");
 
 		assertTrue(a == a2);
 		assertTrue(b == b2);
@@ -107,9 +107,9 @@ public class ContextCacheTest {
 		b2 = ContextCache.INSTANCE.create(B.class, ps);
 		c2 = ContextCache.INSTANCE.create(C.class, ps);
 
-		assertObject(a2).json().is("{f1:'foo'}");
-		assertObject(b2).json().is("{f1:'foo',f2:123}");
-		assertObject(c2).json().is("{f1:'foo',f2:123,f3:true}");
+		assertObject(a2).asJson().is("{f1:'foo'}");
+		assertObject(b2).asJson().is("{f1:'foo',f2:123}");
+		assertObject(c2).asJson().is("{f1:'foo',f2:123,f3:true}");
 
 		assertTrue(a == a2);
 		assertTrue(b == b2);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/IgnoredClassesTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/IgnoredClassesTest.java
index 1bce41d..3eee6be 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/IgnoredClassesTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/IgnoredClassesTest.java
@@ -33,7 +33,7 @@ public class IgnoredClassesTest {
 		assumeTrue(System.getProperty("os.name").toLowerCase().startsWith("win"));
 		// Files should be rendered as strings.
 		File f = new File("C:/temp");
-		assertObject(f).json().is("'C:\\\\temp'");
+		assertObject(f).asJson().is("'C:\\\\temp'");
 	}
 
 	//====================================================================================================
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OListTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OListTest.java
index 6711706..404ba05 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OListTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OListTest.java
@@ -106,7 +106,7 @@ public class OListTest {
 	//====================================================================================================
 	@Test
 	public void testFromReader() throws Exception {
-		assertObject(new OList(new StringReader("[1,2,3]"))).json().is("[1,2,3]");
+		assertObject(new OList(new StringReader("[1,2,3]"))).asJson().is("[1,2,3]");
 	}
 
 	//====================================================================================================
@@ -116,12 +116,12 @@ public class OListTest {
 	public void testGetMap() throws Exception {
 		OList l = new OList("[{1:'true',2:'false'}]");
 		Map<Integer,Boolean> m2 = l.getMap(0, Integer.class, Boolean.class);
-		assertObject(m2).json().is("{'1':true,'2':false}");
+		assertObject(m2).asJson().is("{'1':true,'2':false}");
 		assertEquals(Integer.class, m2.keySet().iterator().next().getClass());
 		assertEquals(Boolean.class, m2.values().iterator().next().getClass());
 
 		m2 = l.get(0, Map.class, Integer.class, Boolean.class);
-		assertObject(m2).json().is("{'1':true,'2':false}");
+		assertObject(m2).asJson().is("{'1':true,'2':false}");
 		assertEquals(Integer.class, m2.keySet().iterator().next().getClass());
 		assertEquals(Boolean.class, m2.values().iterator().next().getClass());
 	}
@@ -133,11 +133,11 @@ public class OListTest {
 	public void testGetList() throws Exception {
 		OList l = new OList("[['123','456']]");
 		List<Integer> l2 = l.getList(0, Integer.class);
-		assertObject(l2).json().is("[123,456]");
+		assertObject(l2).asJson().is("[123,456]");
 		assertEquals(Integer.class, l2.iterator().next().getClass());
 
 		l2 = l.get(0, List.class, Integer.class);
-		assertObject(l2).json().is("[123,456]");
+		assertObject(l2).asJson().is("[123,456]");
 		assertEquals(Integer.class, l2.iterator().next().getClass());
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OMapTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OMapTest.java
index 5b80090..dce7c28 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OMapTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/OMapTest.java
@@ -285,13 +285,13 @@ public class OMapTest {
 		OList l = m.getList("a");
 		OMap m2 = l.getMap(0);
 		m2.put("b", "x");
-		assertObject(m).json().is("{a:[{b:'x'}]}");
+		assertObject(m).asJson().is("{a:[{b:'x'}]}");
 
 		m = OMap.ofJson("{a:[{b:'c'}]}");
 		for (OMap m3 : m.getList("a").elements(OMap.class))
 			m3.put("b", "y");
 
-		assertObject(m).json().is("{a:[{b:'y'}]}");
+		assertObject(m).asJson().is("{a:[{b:'y'}]}");
 	}
 
 	//====================================================================================================
@@ -322,7 +322,7 @@ public class OMapTest {
 	//====================================================================================================
 	@Test
 	public void testFromReader() throws Exception {
-		assertObject(OMap.ofJson(new StringReader("{foo:'bar'}"))).json().is("{foo:'bar'}");
+		assertObject(OMap.ofJson(new StringReader("{foo:'bar'}"))).asJson().is("{foo:'bar'}");
 	}
 
 	//====================================================================================================
@@ -332,7 +332,7 @@ public class OMapTest {
 	public void testGetMap() throws Exception {
 		OMap m = OMap.ofJson("{a:{1:'true',2:'false'}}");
 		Map<Integer,Boolean> m2 = m.getMap("a", Integer.class, Boolean.class, null);
-		assertObject(m2).json().is("{'1':true,'2':false}");
+		assertObject(m2).asJson().is("{'1':true,'2':false}");
 		assertEquals(Integer.class, m2.keySet().iterator().next().getClass());
 		assertEquals(Boolean.class, m2.values().iterator().next().getClass());
 
@@ -340,7 +340,7 @@ public class OMapTest {
 		assertNull(m2);
 
 		m2 = m.get("a", Map.class, Integer.class, Boolean.class);
-		assertObject(m2).json().is("{'1':true,'2':false}");
+		assertObject(m2).asJson().is("{'1':true,'2':false}");
 		assertEquals(Integer.class, m2.keySet().iterator().next().getClass());
 		assertEquals(Boolean.class, m2.values().iterator().next().getClass());
 
@@ -355,14 +355,14 @@ public class OMapTest {
 	public void testGetList() throws Exception {
 		OMap m = OMap.ofJson("{a:['123','456']}");
 		List<Integer> l2 = m.getList("a", Integer.class, null);
-		assertObject(l2).json().is("[123,456]");
+		assertObject(l2).asJson().is("[123,456]");
 		assertEquals(Integer.class, l2.iterator().next().getClass());
 
 		l2 = m.getList("b", Integer.class, null);
 		assertNull(l2);
 
 		l2 = m.get("a", List.class, Integer.class);
-		assertObject(l2).json().is("[123,456]");
+		assertObject(l2).asJson().is("[123,456]");
 		assertEquals(Integer.class, l2.iterator().next().getClass());
 
 		l2 = m.get("b", List.class, Integer.class);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PojoExamplesTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PojoExamplesTest.java
index 50e429c..79bf37b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PojoExamplesTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PojoExamplesTest.java
@@ -30,7 +30,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testProperty() throws Exception {
 		BeanSession bs = BeanContext.create().example(A.class, new A().init()).build().createSession();
-		assertObject(bs.getClassMeta(A.class).getExample(bs)).json().is("{f1:'f1a'}");
+		assertObject(bs.getClassMeta(A.class).getExample(bs)).asJson().is("{f1:'f1a'}");
 	}
 
 	public static class A {
@@ -48,7 +48,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleField() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(B1.class).getExample(bs)).json().is("{f1:'f1b'}");
+		assertObject(bs.getClassMeta(B1.class).getExample(bs)).asJson().is("{f1:'f1b'}");
 	}
 
 	public static class B1 {
@@ -66,7 +66,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleField_usingConfig() throws Exception {
 		BeanSession bs = BeanContext.create().applyAnnotations(B1cConfig.class).build().createSession();
-		assertObject(bs.getClassMeta(B1c.class).getExample(bs)).json().is("{f1:'f1b'}");
+		assertObject(bs.getClassMeta(B1c.class).getExample(bs)).asJson().is("{f1:'f1b'}");
 	}
 
 	@Example(on="Dummy1.EXAMPLE")
@@ -91,7 +91,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleFieldPrivate() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(B2.class).getExample(bs)).json().is("{f1:'f1b'}");
+		assertObject(bs.getClassMeta(B2.class).getExample(bs)).asJson().is("{f1:'f1b'}");
 	}
 
 	public static class B2 {
@@ -109,7 +109,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleFieldPrivate_usingConfig() throws Exception {
 		BeanSession bs = BeanContext.create().applyAnnotations(B2cConfig.class).build().createSession();
-		assertObject(bs.getClassMeta(B2c.class).getExample(bs)).json().is("{f1:'f1b'}");
+		assertObject(bs.getClassMeta(B2c.class).getExample(bs)).asJson().is("{f1:'f1b'}");
 	}
 
 	@Example(on="Dummy1.EXAMPLE")
@@ -135,7 +135,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPublicNoArgMethod() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(C1.class).getExample(bs)).json().is("{f1:'f1c'}");
+		assertObject(bs.getClassMeta(C1.class).getExample(bs)).asJson().is("{f1:'f1c'}");
 	}
 
 	public static class C1 {
@@ -155,7 +155,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPublicNoArgMethod_usingConfig() throws Exception {
 		BeanSession bs = BeanContext.create().applyAnnotations(C1cConfig.class).build().createSession();
-		assertObject(bs.getClassMeta(C1c.class).getExample(bs)).json().is("{f1:'f1c'}");
+		assertObject(bs.getClassMeta(C1c.class).getExample(bs)).asJson().is("{f1:'f1c'}");
 	}
 
 	@Example(on="Dummy1.x")
@@ -182,7 +182,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPrivateNoArgMethod() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(C2.class).getExample(bs)).json().is("{f1:'f1c'}");
+		assertObject(bs.getClassMeta(C2.class).getExample(bs)).asJson().is("{f1:'f1c'}");
 	}
 
 	public static class C2 {
@@ -202,7 +202,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPrivateNoArgMethod_usingConfig() throws Exception {
 		BeanSession bs = BeanContext.create().applyAnnotations(C2cConfig.class).build().createSession();
-		assertObject(bs.getClassMeta(C2c.class).getExample(bs)).json().is("{f1:'f1c'}");
+		assertObject(bs.getClassMeta(C2c.class).getExample(bs)).asJson().is("{f1:'f1c'}");
 	}
 
 	@Example(on="Dummy1.x")
@@ -230,7 +230,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPublicOneArgMethod() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(D1.class).getExample(bs)).json().is("{f1:'f1d'}");
+		assertObject(bs.getClassMeta(D1.class).getExample(bs)).asJson().is("{f1:'f1d'}");
 	}
 
 	public static class D1 {
@@ -250,7 +250,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleOnPublicOneArgMethod_usingConfig() throws Exception {
 		BeanSession bs = BeanContext.create().applyAnnotations(D1cConfig.class).build().createSession();
-		assertObject(bs.getClassMeta(D1c.class).getExample(bs)).json().is("{f1:'f1d'}");
+		assertObject(bs.getClassMeta(D1c.class).getExample(bs)).asJson().is("{f1:'f1d'}");
 	}
 
 	@Example(on="Dummy1.x(BeanSession)")
@@ -277,7 +277,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleMethod() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(E1.class).getExample(bs)).json().is("{f1:'f1e'}");
+		assertObject(bs.getClassMeta(E1.class).getExample(bs)).asJson().is("{f1:'f1e'}");
 	}
 
 	public static class E1 {
@@ -299,7 +299,7 @@ public class PojoExamplesTest {
 	@Test
 	public void testExampleBeanSessionMethod() throws Exception {
 		BeanSession bs = BeanContext.create().build().createSession();
-		assertObject(bs.getClassMeta(E2.class).getExample(bs)).json().is("{f1:'f1e'}");
+		assertObject(bs.getClassMeta(E2.class).getExample(bs)).asJson().is("{f1:'f1e'}");
 	}
 
 	public static class E2 {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
index b12746b..da95f72 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
@@ -44,7 +44,7 @@ public class PropertyStoreTest {
 		b.set("A.f2.s", "2");
 		b.set("A.f1.s", "1");
 
-		assertObject(b.build()).json().is("{A:{'f1.s':'1','f2.s':'2'},B:{'f3.s':'3','f4.s':'4'}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.s':'1','f2.s':'2'},B:{'f3.s':'3','f4.s':'4'}}");
 	}
 
 	//====================================================================================================
@@ -77,7 +77,7 @@ public class PropertyStoreTest {
 		b.set("A.f5.s", OList.ofJson("[1,2]"));
 		b.set("A.f6.s", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.s':'1','f2.s':'2','f3.s':'true','f4.s':'{foo:\\'bar\\'}','f5.s':'[1,2]'}}");
+		assertObject(ps).asJson().is("{A:{'f1.s':'1','f2.s':'2','f3.s':'true','f4.s':'{foo:\\'bar\\'}','f5.s':'[1,2]'}}");
 		assertObject(ps.getProperty("A.f1.s")).isType(String.class);
 		assertObject(ps.getProperty("A.f2.s")).isType(String.class);
 		assertObject(ps.getProperty("A.f3.s")).isType(String.class);
@@ -92,7 +92,7 @@ public class PropertyStoreTest {
 		b.set("A.f5", OList.ofJson("[1,2]"));
 		b.set("A.f6", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{f1:'1',f2:'2',f3:'true',f4:'{foo:\\'bar\\'}',f5:'[1,2]'}}");
+		assertObject(ps).asJson().is("{A:{f1:'1',f2:'2',f3:'true',f4:'{foo:\\'bar\\'}',f5:'[1,2]'}}");
 		assertObject(ps.getProperty("A.f1")).isType(String.class);
 		assertObject(ps.getProperty("A.f2")).isType(String.class);
 		assertObject(ps.getProperty("A.f3")).isType(String.class);
@@ -105,7 +105,7 @@ public class PropertyStoreTest {
 		b.remove("A.f4");
 		b.remove("A.f5");
 
-		assertObject(b.build()).json().is("{A:{f1:'x1'}}");
+		assertObject(b.build()).asJson().is("{A:{f1:'x1'}}");
 
 		testError(b, "A.f1/add", "foo", "addTo() can only be used on properties of type Set on property 'A.f1'.");
 		testError(b, "A.f1/add.123", "foo", "addTo() can only be used on properties of type Set on property 'A.f1'.");
@@ -122,7 +122,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.b", new StringBuilder("foo"));
 		b.set("A.f5.b", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.b':true,'f2.b':false,'f3.b':true,'f4.b':false}}");
+		assertObject(ps).asJson().is("{A:{'f1.b':true,'f2.b':false,'f3.b':true,'f4.b':false}}");
 		assertObject(ps.getProperty("A.f1.b")).isType(Boolean.class);
 		assertObject(ps.getProperty("A.f2.b")).isType(Boolean.class);
 		assertObject(ps.getProperty("A.f3.b")).isType(Boolean.class);
@@ -133,7 +133,7 @@ public class PropertyStoreTest {
 		b.set("A.f3.b", null);
 		b.remove("A.f4.b");
 		b.remove("A.f5.b");
-		assertObject(b.build()).json().is("{A:{'f1.b':true}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.b':true}}");
 
 		testError(b, "A.f1.b/add", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.b'.");
 		testError(b, "A.f1.b/add.123", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.b'.");
@@ -150,7 +150,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.i", new StringBuilder("-1"));
 		b.set("A.f5.i", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.i':123,'f2.i':123,'f3.i':123,'f4.i':-1}}");
+		assertObject(ps).asJson().is("{A:{'f1.i':123,'f2.i':123,'f3.i':123,'f4.i':-1}}");
 		assertObject(ps.getProperty("A.f1.i")).isType(Integer.class);
 		assertObject(ps.getProperty("A.f2.i")).isType(Integer.class);
 		assertObject(ps.getProperty("A.f3.i")).isType(Integer.class);
@@ -161,7 +161,7 @@ public class PropertyStoreTest {
 		b.set("A.f3.i", null);
 		b.remove("A.f4.i");
 		b.remove("A.f5.i");
-		assertObject(b.build()).json().is("{A:{'f1.i':123}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.i':123}}");
 
 		testError(b, "A.f1.i/add", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.i'.");
 		testError(b, "A.f1.i/add.123", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.i'.");
@@ -177,12 +177,12 @@ public class PropertyStoreTest {
 		b.set("A.f2.c", Integer.class);
 		b.set("A.f3.c", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.c':'java.lang.String','f2.c':'java.lang.Integer'}}");
+		assertObject(ps).asJson().is("{A:{'f1.c':'java.lang.String','f2.c':'java.lang.Integer'}}");
 		assertObject(ps.getProperty("A.f1.c")).isType(Class.class);
 
 		// Test nulls
 		b.set("A.f2.c", null);
-		assertObject(b.build()).json().is("{A:{'f1.c':'java.lang.String'}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.c':'java.lang.String'}}");
 
 		testError(b, "A.f1.c/add", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.c'.");
 		testError(b, "A.f1.c/add.123", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.c'.");
@@ -202,7 +202,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.o", StringBuilder.class);
 		b.set("A.f5.o", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.o':123,'f2.o':true,'f3.o':'123','f4.o':'java.lang.StringBuilder'}}");
+		assertObject(ps).asJson().is("{A:{'f1.o':123,'f2.o':true,'f3.o':'123','f4.o':'java.lang.StringBuilder'}}");
 		assertObject(ps.getProperty("A.f1.o")).isType(Integer.class);
 		assertObject(ps.getProperty("A.f2.o")).isType(Boolean.class);
 		assertObject(ps.getProperty("A.f3.o")).isType(StringBuilder.class);
@@ -213,7 +213,7 @@ public class PropertyStoreTest {
 		b.set("A.f3.o", null);
 		b.remove("A.f4.o");
 		b.remove("A.f5.o");
-		assertObject(b.build()).json().is("{A:{'f1.o':123}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.o':123}}");
 
 		testError(b, "A.f1.o/add", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.o'.");
 		testError(b, "A.f1.o/add.123", "foo", "addTo() can only be used on properties of type Set on property 'A.f1.o'.");
@@ -230,7 +230,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.ss", "['foo',123,true]");
 		b.set("A.f5.ss", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.ss':['bar','foo'],'f2.ss':['123','ONE','true'],'f3.ss':['foo'],'f4.ss':['123','foo','true']}}");
+		assertObject(ps).asJson().is("{A:{'f1.ss':['bar','foo'],'f2.ss':['123','ONE','true'],'f3.ss':['foo'],'f4.ss':['123','foo','true']}}");
 		assertObject(ps.getProperty("A.f1.ss")).isType(Set.class);
 		assertObject(ps.getProperty("A.f2.ss")).isType(Set.class);
 		assertObject(ps.getProperty("A.f3.ss")).isType(Set.class);
@@ -238,48 +238,48 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.ss/add", "foo");
-		assertObject(b.build()).json().is("{A:{'f1.ss':['foo']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['foo']}}");
 		b.set("A.f1.ss/remove", "foo");
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.ss/add", "['foo','bar','baz']");
 		b.set("A.f1.ss/add", "qux");
 		b.addTo("A.f1.ss","quux");
-		assertObject(b.build()).json().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
 		b.set("A.f1.ss/remove", "['foo','bar']");
 		b.set("A.f1.ss/remove", "qux");
 		b.removeFrom("A.f1.ss", "quux");
-		assertObject(b.build()).json().is("{A:{'f1.ss':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['baz']}}");
 
 		b.clear();
 		b.set("A.f1.ss/add", AList.of("foo", "bar", "baz"));
 		b.set("A.f1.ss/add", AList.of("qux"));
 		b.addTo("A.f1.ss", AList.of("quux"));
-		assertObject(b.build()).json().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
 		b.set("A.f1.ss/remove", AList.of("foo", "bar"));
 		b.set("A.f1.ss/remove", AList.of("qux"));
 		b.removeFrom("A.f1.ss", AList.of("quux"));
-		assertObject(b.build()).json().is("{A:{'f1.ss':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['baz']}}");
 
 		b.clear();
 		b.set("A.f1.ss/add", new String[]{"foo", "bar", "baz"});
 		b.set("A.f1.ss/add", new String[]{"qux"});
 		b.addTo("A.f1.ss", new String[]{"quux"});
-		assertObject(b.build()).json().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['bar','baz','foo','quux','qux']}}");
 
 		b.addTo("A.f1.ss", new String[]{"quuux"});
 		b.addTo("A.f1.ss", new String[]{"quuuux"});
-		assertObject(b.build()).json().is("{A:{'f1.ss':['bar','baz','foo','quuuux','quuux','quux','qux']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['bar','baz','foo','quuuux','quuux','quux','qux']}}");
 		b.set("A.f1.ss/remove", new String[]{"quuux", "quuuux"});
 
 		b.set("A.f1.ss/remove", new String[]{"foo", "bar"});
 		b.set("A.f1.ss/remove", new String[]{"qux"});
 		b.removeFrom("A.f1.ss", new String[]{"quux"});
-		assertObject(b.build()).json().is("{A:{'f1.ss':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ss':['baz']}}");
 
 		b.set("A.f1.ss", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -292,7 +292,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.si", "[1,2,3]");
 		b.set("A.f5.si", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.si':[1,2,3],'f2.si':[123,456],'f3.si':[123],'f4.si':[1,2,3]}}");
+		assertObject(ps).asJson().is("{A:{'f1.si':[1,2,3],'f2.si':[123,456],'f3.si':[123],'f4.si':[1,2,3]}}");
 		assertObject(ps.getProperty("A.f1.si")).isType(Set.class);
 		assertObject(ps.getProperty("A.f2.si")).isType(Set.class);
 		assertObject(ps.getProperty("A.f3.si")).isType(Set.class);
@@ -300,72 +300,72 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.si/add", "123");
-		assertObject(b.build()).json().is("{A:{'f1.si':[123]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[123]}}");
 		b.set("A.f1.si/remove", "123");
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.si/add", "['3','2','1']");
 		b.set("A.f1.si/add", "4");
 		b.addTo("A.f1.si", "5");
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", "['1','2']");
 		b.set("A.f1.si/remove", "3");
 		b.removeFrom("A.f1.si", "4");
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.clear();
 		b.set("A.f1.si/add", AList.of("3", "2", "1"));
 		b.set("A.f1.si/add", AList.of("4"));
 		b.addTo("A.f1.si", AList.of("5"));
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", AList.of("1", "2"));
 		b.set("A.f1.si/remove", AList.of("3"));
 		b.removeFrom("A.f1.si", AList.of("4"));
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.clear();
 		b.set("A.f1.si/add", AList.of(1, 2, 3));
 		b.set("A.f1.si/add", AList.of(4));
 		b.addTo("A.f1.si", AList.of(5));
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", AList.of(1, 2));
 		b.set("A.f1.si/remove", AList.of(3));
 		b.removeFrom("A.f1.si", AList.of(4));
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.clear();
 		b.set("A.f1.si/add", new String[]{"3", "2", "1"});
 		b.set("A.f1.si/add", new String[]{"4"});
 		b.addTo("A.f1.si", new String[]{"5"});
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", new String[]{"1", "2"});
 		b.set("A.f1.si/remove", new String[]{"3"});
 		b.removeFrom("A.f1.si", new String[]{"4"});
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.clear();
 		b.set("A.f1.si/add", new Integer[]{3, 2, 1});
 		b.set("A.f1.si/add", new Integer[]{4});
 		b.addTo("A.f1.si", new Integer[]{5});
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", new Integer[]{1, 2});
 		b.set("A.f1.si/remove", new Integer[]{3});
 		b.removeFrom("A.f1.si", new Integer[]{4});
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.clear();
 		b.set("A.f1.si/add", new int[]{3, 2, 1});
 		b.set("A.f1.si/add", new int[]{4});
 		b.addTo("A.f1.si", new int[]{5});
-		assertObject(b.build()).json().is("{A:{'f1.si':[1,2,3,4,5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[1,2,3,4,5]}}");
 		b.set("A.f1.si/remove", new int[]{1, 2});
 		b.set("A.f1.si/remove", new int[]{3});
 		b.removeFrom("A.f1.si", new int[]{4});
-		assertObject(b.build()).json().is("{A:{'f1.si':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.si':[5]}}");
 
 		b.set("A.f1.si", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -376,7 +376,7 @@ public class PropertyStoreTest {
 		b.set("A.f2.sc", AList.of(String.class, Integer.class, null));
 		b.set("A.f3.sc", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String'],'f2.sc':['java.lang.Integer','java.lang.String']}}");
+		assertObject(ps).asJson().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String'],'f2.sc':['java.lang.Integer','java.lang.String']}}");
 		assertObject(ps.getProperty("A.f1.sc")).isType(Set.class);
 		assertObject(ps.getProperty("A.f2.sc")).isType(Set.class);
 		assertObject(((Set<?>)ps.getProperty("A.f1.sc")).iterator().next()).isType(Class.class);
@@ -384,9 +384,9 @@ public class PropertyStoreTest {
 		b.clear();
 		b.set("A.f1.sc/add", Integer.class);
 		b.addTo("A.f1.sc", String.class);
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String']}}");
 		b.set("A.f1.sc/remove", Integer.class);
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.lang.String']}}");
 
 		b.clear();
 		testError(b, "A.f1.sc/add", "['java.lang.Integer']", "Cannot add value '[\\'java.lang.Integer\\']' (String) to property 'f1.sc' (Set<Class>).  Value 'java.lang.Integer' (String) cannot be converted to a Class.");
@@ -396,34 +396,34 @@ public class PropertyStoreTest {
 		b.set("A.f1.sc/add", AList.of(Integer.class, String.class));
 		b.set("A.f1.sc/add", AList.of(Map.class));
 		b.addTo("A.f1.sc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
 		b.set("A.f1.sc/remove", AList.of(Integer.class, String.class));
 		b.removeFrom("A.f1.sc", AList.create());
 		b.removeFrom("A.f1.sc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.util.Map']}}");
 
 		b.clear();
 		b.set("A.f1.sc/add", AList.of(Integer.class, String.class));
 		b.set("A.f1.sc/add", AList.of(Map.class));
 		b.addTo("A.f1.sc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
 		b.set("A.f1.sc/remove", AList.of(Integer.class, String.class));
 		b.set("A.f1.sc/remove", AList.create());
 		b.removeFrom("A.f1.sc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.util.Map']}}");
 
 		b.clear();
 		b.set("A.f1.sc/add", new Class<?>[]{Integer.class, String.class});
 		b.set("A.f1.sc/add", new Class<?>[]{Map.class});
 		b.addTo("A.f1.sc", new Class<?>[]{List.class});
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.lang.Integer','java.lang.String','java.util.List','java.util.Map']}}");
 		b.set("A.f1.sc/remove", new Class<?>[]{Integer.class, String.class});
 		b.set("A.f1.sc/remove", new Class<?>[]{});
 		b.removeFrom("A.f1.sc", new Class<?>[]{List.class});
-		assertObject(b.build()).json().is("{A:{'f1.sc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sc':['java.util.Map']}}");
 
 		b.set("A.f1.sc", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -436,7 +436,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.ls", "['foo',123,true]");
 		b.set("A.f5.ls", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.ls':['foo','bar'],'f2.ls':['123','true','ONE'],'f3.ls':['foo'],'f4.ls':['foo','123','true']}}");
+		assertObject(ps).asJson().is("{A:{'f1.ls':['foo','bar'],'f2.ls':['123','true','ONE'],'f3.ls':['foo'],'f4.ls':['foo','123','true']}}");
 		assertObject(ps.getProperty("A.f1.ls")).isType(List.class);
 		assertObject(ps.getProperty("A.f2.ls")).isType(List.class);
 		assertObject(ps.getProperty("A.f3.ls")).isType(List.class);
@@ -444,50 +444,50 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.ls/prepend", "foo");
-		assertObject(b.build()).json().is("{A:{'f1.ls':['foo']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['foo']}}");
 		b.set("A.f1.ls/remove", "foo");
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.ls/prepend", "['foo','bar','baz']");
 		b.set("A.f1.ls/prepend", "qux");
 		b.prependTo("A.f1.ls","quux");
-		assertObject(b.build()).json().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
 		b.set("A.f1.ls/remove", "['foo','bar']");
 		b.set("A.f1.ls/remove", "qux");
 		b.removeFrom("A.f1.ls", "quux");
-		assertObject(b.build()).json().is("{A:{'f1.ls':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['baz']}}");
 
 		b.clear();
 		b.set("A.f1.ls/prepend", AList.of("foo", "bar", "baz"));
 		b.set("A.f1.ls/prepend", AList.of("qux"));
 		b.prependTo("A.f1.ls", AList.of("quux"));
-		assertObject(b.build()).json().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
 		b.set("A.f1.ls/remove", AList.of("foo", "bar"));
 		b.set("A.f1.ls/remove", AList.of("qux"));
 		b.removeFrom("A.f1.ls", AList.of("quux"));
-		assertObject(b.build()).json().is("{A:{'f1.ls':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['baz']}}");
 
 		b.clear();
 		b.set("A.f1.ls/prepend", new String[]{"foo", "bar", "baz"});
 		b.set("A.f1.ls/prepend", new String[]{"qux"});
 		b.prependTo("A.f1.ls", new String[]{"quux"});
-		assertObject(b.build()).json().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['quux','qux','foo','bar','baz']}}");
 
 		b.appendTo("A.f1.ls", new String[]{"q1x", "q2x"});
 		b.appendTo("A.f1.ls", "q3x");
 		b.prependTo("A.f1.ls", new String[]{"q4x", "q5x"});
 		b.prependTo("A.f1.ls", "q6x");
-		assertObject(b.build()).json().is("{A:{'f1.ls':['q6x','q4x','q5x','quux','qux','foo','bar','baz','q1x','q2x','q3x']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['q6x','q4x','q5x','quux','qux','foo','bar','baz','q1x','q2x','q3x']}}");
 		b.set("A.f1.ls/remove", new String[]{"q1x","q2x","q3x","q4x","q5x","q6x"});
 
 		b.set("A.f1.ls/remove", new String[]{"foo", "bar"});
 		b.set("A.f1.ls/remove", new String[]{"qux"});
 		b.removeFrom("A.f1.ls", new String[]{"quux"});
-		assertObject(b.build()).json().is("{A:{'f1.ls':['baz']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.ls':['baz']}}");
 
 		b.set("A.f1.ls", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -500,7 +500,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.li", "[1,2,3]");
 		b.set("A.f5.li", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.li':[1,2,3],'f2.li':[123,456],'f3.li':[123],'f4.li':[1,2,3]}}");
+		assertObject(ps).asJson().is("{A:{'f1.li':[1,2,3],'f2.li':[123,456],'f3.li':[123],'f4.li':[1,2,3]}}");
 		assertObject(ps.getProperty("A.f1.li")).isType(List.class);
 		assertObject(ps.getProperty("A.f2.li")).isType(List.class);
 		assertObject(ps.getProperty("A.f3.li")).isType(List.class);
@@ -508,72 +508,72 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.li/prepend", "123");
-		assertObject(b.build()).json().is("{A:{'f1.li':[123]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[123]}}");
 		b.set("A.f1.li/remove", "123");
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", "['1','2','3']");
 		b.set("A.f1.li/prepend", "4");
 		b.prependTo("A.f1.li", "5");
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", "['1','2']");
 		b.set("A.f1.li/remove", "3");
 		b.removeFrom("A.f1.li", "4");
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", AList.of("1", "2", "3"));
 		b.set("A.f1.li/prepend", AList.of("4"));
 		b.prependTo("A.f1.li", AList.of("5"));
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", AList.of("1", "2"));
 		b.set("A.f1.li/remove", AList.of("3"));
 		b.removeFrom("A.f1.li", AList.of("4"));
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", AList.of(1, 2, 3));
 		b.set("A.f1.li/prepend", AList.of(4));
 		b.prependTo("A.f1.li", AList.of(5));
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", AList.of(1, 2));
 		b.set("A.f1.li/remove", AList.of(3));
 		b.removeFrom("A.f1.li", AList.of(4));
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", new String[]{"1", "2", "3"});
 		b.set("A.f1.li/prepend", new String[]{"4"});
 		b.prependTo("A.f1.li", new String[]{"5"});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", new String[]{"1", "2"});
 		b.set("A.f1.li/remove", new String[]{"3"});
 		b.removeFrom("A.f1.li", new String[]{"4"});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", new Integer[]{1, 2, 3});
 		b.set("A.f1.li/prepend", new Integer[]{4});
 		b.prependTo("A.f1.li", new Integer[]{5});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", new Integer[]{1, 2});
 		b.set("A.f1.li/remove", new Integer[]{3});
 		b.removeFrom("A.f1.li", new Integer[]{4});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.clear();
 		b.set("A.f1.li/prepend", new int[]{1, 2, 3});
 		b.set("A.f1.li/prepend", new int[]{4});
 		b.prependTo("A.f1.li", new int[]{5});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5,4,1,2,3]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5,4,1,2,3]}}");
 		b.set("A.f1.li/remove", new int[]{1, 2});
 		b.set("A.f1.li/remove", new int[]{3});
 		b.removeFrom("A.f1.li", new int[]{4});
-		assertObject(b.build()).json().is("{A:{'f1.li':[5]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.li':[5]}}");
 
 		b.set("A.f1.li", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 //		b.clear();
 //		b.set("A.f1.ls/add", "['1','2','3']");
@@ -602,16 +602,16 @@ public class PropertyStoreTest {
 		b.set("A.f2.lc", AList.of(String.class, Integer.class, null));
 		b.set("A.f3.lc", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.lc':['java.lang.String','java.lang.Integer'],'f2.lc':['java.lang.String','java.lang.Integer']}}");
+		assertObject(ps).asJson().is("{A:{'f1.lc':['java.lang.String','java.lang.Integer'],'f2.lc':['java.lang.String','java.lang.Integer']}}");
 		assertObject(ps.getProperty("A.f1.lc")).isType(List.class);
 		assertObject(ps.getProperty("A.f2.lc")).isType(List.class);
 
 		b.clear();
 		b.set("A.f1.lc/prepend", Integer.class);
 		b.prependTo("A.f1.lc", String.class);
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.lang.String','java.lang.Integer']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.lang.String','java.lang.Integer']}}");
 		b.set("A.f1.lc/remove", Integer.class);
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.lang.String']}}");
 
 		b.clear();
 		testError(b, "A.f1.lc/prepend", "['java.lang.Integer']", "Cannot prepend value '[\\'java.lang.Integer\\']' (String) to property 'f1.lc' (List<Class>).  Value 'java.lang.Integer' (String) cannot be converted to a Class.");
@@ -621,34 +621,34 @@ public class PropertyStoreTest {
 		b.set("A.f1.lc/prepend", AList.of(Integer.class, String.class));
 		b.set("A.f1.lc/prepend", AList.of(Map.class));
 		b.prependTo("A.f1.lc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
 		b.set("A.f1.lc/remove", AList.of(Integer.class, String.class));
 		b.removeFrom("A.f1.lc", AList.create());
 		b.removeFrom("A.f1.lc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.Map']}}");
 
 		b.clear();
 		b.set("A.f1.lc/prepend", AList.of(Integer.class, String.class));
 		b.set("A.f1.lc/prepend", AList.of(Map.class));
 		b.prependTo("A.f1.lc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
 		b.set("A.f1.lc/remove", AList.of(Integer.class, String.class));
 		b.set("A.f1.lc/remove", AList.create());
 		b.removeFrom("A.f1.lc", AList.of(List.class));
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.Map']}}");
 
 		b.clear();
 		b.set("A.f1.lc/prepend", new Class<?>[]{Integer.class, String.class});
 		b.set("A.f1.lc/prepend", new Class<?>[]{Map.class});
 		b.prependTo("A.f1.lc", new Class<?>[]{List.class});
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.List','java.util.Map','java.lang.Integer','java.lang.String']}}");
 		b.set("A.f1.lc/remove", new Class<?>[]{Integer.class, String.class});
 		b.set("A.f1.lc/remove", new Class<?>[]{});
 		b.removeFrom("A.f1.lc", new Class<?>[]{List.class});
-		assertObject(b.build()).json().is("{A:{'f1.lc':['java.util.Map']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lc':['java.util.Map']}}");
 
 		b.set("A.f1.lc", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 //		b.set("A.f1.lc/add", String.class);
@@ -675,7 +675,7 @@ public class PropertyStoreTest {
 		b.set("A.f2.lo", AList.of(123, true, new StringBuilder(123), StringBuilder.class, null));
 		b.set("A.f3.lo", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.lo':['java.lang.StringBuilder'],'f2.lo':[123,true,'','java.lang.StringBuilder']}}");
+		assertObject(ps).asJson().is("{A:{'f1.lo':['java.lang.StringBuilder'],'f2.lo':[123,true,'','java.lang.StringBuilder']}}");
 		assertObject(ps.getProperty("A.f1.lo")).isType(List.class);
 		assertObject(ps.getProperty("A.f2.lo")).isType(List.class);
 		assertObject(((List<?>)ps.getProperty("A.f1.lo")).get(0)).isType(Class.class);
@@ -687,42 +687,42 @@ public class PropertyStoreTest {
 		b.clear();
 		b.set("A.f1.lo/prepend", 1);
 		b.prependTo("A.f1.lo", 2);
-		assertObject(b.build()).json().is("{A:{'f1.lo':[2,1]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':[2,1]}}");
 		b.set("A.f1.lo/remove", 1);
-		assertObject(b.build()).json().is("{A:{'f1.lo':[2]}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':[2]}}");
 
 		b.clear();
 		b.set("A.f1.lo/prepend", AList.of(StringBuilder.class));
 		b.set("A.f1.lo/prepend", AList.of(HashMap.class));
 		b.prependTo("A.f1.lo", AList.of(LinkedList.class));
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
 		b.set("A.f1.lo/remove", AList.of(HashMap.class));
 		b.removeFrom("A.f1.lo", AList.create());
 		b.removeFrom("A.f1.lo", AList.of(LinkedList.class));
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
 
 		b.clear();
 		b.set("A.f1.lo/prepend", AList.of(StringBuilder.class));
 		b.set("A.f1.lo/prepend", AList.of(HashMap.class));
 		b.prependTo("A.f1.lo", AList.of(LinkedList.class));
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
 		b.set("A.f1.lo/remove", AList.of(HashMap.class));
 		b.set("A.f1.lo/remove", AList.create());
 		b.removeFrom("A.f1.lo", AList.of(LinkedList.class));
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
 
 		b.clear();
 		b.set("A.f1.lo/prepend", new Class<?>[]{StringBuilder.class});
 		b.set("A.f1.lo/prepend", new Class<?>[]{HashMap.class});
 		b.prependTo("A.f1.lo", new Class<?>[]{LinkedList.class});
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.util.LinkedList','java.util.HashMap','java.lang.StringBuilder']}}");
 		b.set("A.f1.lo/remove", new Class<?>[]{HashMap.class});
 		b.set("A.f1.lo/remove", new Class<?>[]{});
 		b.removeFrom("A.f1.lo", new Class<?>[]{LinkedList.class});
-		assertObject(b.build()).json().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.lo':['java.lang.StringBuilder']}}");
 
 		b.set("A.f1.lo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 //		b.clear();
 //		b.set("A.f1.lo/add", StringBuilder.class);
@@ -750,7 +750,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.sms", "{foo:'bar',baz:123,qux:true}");
 		b.set("A.f5.sms", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.sms':{baz:'qux',foo:'bar'},'f2.sms':{bar:'true',baz:'ONE',foo:'123'},'f3.sms':{foo:'bar'},'f4.sms':{baz:'123',foo:'bar',qux:'true'}}}");
+		assertObject(ps).asJson().is("{A:{'f1.sms':{baz:'qux',foo:'bar'},'f2.sms':{bar:'true',baz:'ONE',foo:'123'},'f3.sms':{foo:'bar'},'f4.sms':{baz:'123',foo:'bar',qux:'true'}}}");
 		assertObject(ps.getProperty("A.f1.sms")).isType(Map.class);
 		assertObject(ps.getProperty("A.f2.sms")).isType(Map.class);
 		assertObject(ps.getProperty("A.f3.sms")).isType(Map.class);
@@ -758,17 +758,17 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.sms/put", "{foo:'bar'}");
-		assertObject(b.build()).json().is("{A:{'f1.sms':{foo:'bar'}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sms':{foo:'bar'}}}");
 
 		b.clear();
 		b.set("A.f1.sms/put.foo", "bar");
-		assertObject(b.build()).json().is("{A:{'f1.sms':{foo:'bar'}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.sms':{foo:'bar'}}}");
 		b.set("A.f1.sms/put.foo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.sms", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.sms", "{foo:'bar'}");
@@ -786,7 +786,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.smi", "{foo:'123',baz:456,qux:null}");
 		b.set("A.f5.smi", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.smi':{baz:2,foo:1},'f2.smi':{bar:456,foo:123},'f3.smi':{foo:123},'f4.smi':{baz:456,foo:123}}}");
+		assertObject(ps).asJson().is("{A:{'f1.smi':{baz:2,foo:1},'f2.smi':{bar:456,foo:123},'f3.smi':{foo:123},'f4.smi':{baz:456,foo:123}}}");
 		assertObject(ps.getProperty("A.f1.smi")).isType(Map.class);
 		assertObject(ps.getProperty("A.f2.smi")).isType(Map.class);
 		assertObject(ps.getProperty("A.f3.smi")).isType(Map.class);
@@ -794,17 +794,17 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.smi/put", "{foo:'123'}");
-		assertObject(b.build()).json().is("{A:{'f1.smi':{foo:123}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.smi':{foo:123}}}");
 
 		b.clear();
 		b.set("A.f1.smi/put.foo", "123");
-		assertObject(b.build()).json().is("{A:{'f1.smi':{foo:123}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.smi':{foo:123}}}");
 		b.set("A.f1.smi/put.foo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smi", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smi", "{foo:'123'}");
@@ -820,7 +820,7 @@ public class PropertyStoreTest {
 		b.set("A.f2.smc", AMap.of("foo",String.class,"bar",Integer.class,"baz",null));
 		b.set("A.f3.smc", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.smc':{baz:'java.lang.Integer',foo:'java.lang.String'},'f2.smc':{bar:'java.lang.Integer',foo:'java.lang.String'}}}");
+		assertObject(ps).asJson().is("{A:{'f1.smc':{baz:'java.lang.Integer',foo:'java.lang.String'},'f2.smc':{bar:'java.lang.Integer',foo:'java.lang.String'}}}");
 		assertObject(ps.getProperty("A.f1.smc")).isType(Map.class);
 		assertObject(ps.getProperty("A.f2.smc")).isType(Map.class);
 		assertObject(((Map<?,?>)ps.getProperty("A.f1.smc")).values().iterator().next()).isType(Class.class);
@@ -828,13 +828,13 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.smc/put.foo", String.class);
-		assertObject(b.build()).json().is("{A:{'f1.smc':{foo:'java.lang.String'}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.smc':{foo:'java.lang.String'}}}");
 		b.set("A.f1.smc/put.foo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smc", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smc/put.foo", String.class);
@@ -853,7 +853,7 @@ public class PropertyStoreTest {
 		b.set("A.f4.smo", "{foo:'123',baz:456,qux:null}");
 		b.set("A.f5.smo", null);
 		ps = b.build();
-		assertObject(ps).json().is("{A:{'f1.smo':{baz:'2',foo:'1'},'f2.smo':{bar:'java.lang.StringBuilder',foo:123},'f3.smo':{foo:'123'},'f4.smo':{baz:456,foo:'123'}}}");
+		assertObject(ps).asJson().is("{A:{'f1.smo':{baz:'2',foo:'1'},'f2.smo':{bar:'java.lang.StringBuilder',foo:123},'f3.smo':{foo:'123'},'f4.smo':{baz:456,foo:'123'}}}");
 		assertObject(ps.getProperty("A.f1.smo")).isType(Map.class);
 		assertObject(ps.getProperty("A.f2.smo")).isType(Map.class);
 		assertObject(ps.getProperty("A.f3.smo")).isType(Map.class);
@@ -861,17 +861,17 @@ public class PropertyStoreTest {
 
 		b.clear();
 		b.set("A.f1.smo/put", "{foo:'123'}");
-		assertObject(b.build()).json().is("{A:{'f1.smo':{foo:'123'}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.smo':{foo:'123'}}}");
 
 		b.clear();
 		b.set("A.f1.smo/put.foo", "123");
-		assertObject(b.build()).json().is("{A:{'f1.smo':{foo:'123'}}}");
+		assertObject(b.build()).asJson().is("{A:{'f1.smo':{foo:'123'}}}");
 		b.set("A.f1.smo/put.foo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smo", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 
 		b.clear();
 		b.set("A.f1.smo", "{foo:'123'}");
@@ -1439,12 +1439,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.ss", "['foo','bar']");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.ss")).json().is("['bar','foo']");
+		assertObject(ps.getProperty("A.f1.ss")).asJson().is("['bar','foo']");
 
 		System.clearProperty("A.f1.ss");
 		System.setProperty("A.f1", "['foo','bar']");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.ss")).json().is("['bar','foo']");
+		assertObject(ps.getProperty("A.f1.ss")).asJson().is("['bar','foo']");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.ss"));
@@ -1455,12 +1455,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.si", "['2','1']");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.si")).json().is("[1,2]");
+		assertObject(ps.getProperty("A.f1.si")).asJson().is("[1,2]");
 
 		System.clearProperty("A.f1.si");
 		System.setProperty("A.f1", "['2','1']");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.si")).json().is("[1,2]");
+		assertObject(ps.getProperty("A.f1.si")).asJson().is("[1,2]");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.si"));
@@ -1471,12 +1471,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.ls", "['foo','bar']");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.ls")).json().is("['foo','bar']");
+		assertObject(ps.getProperty("A.f1.ls")).asJson().is("['foo','bar']");
 
 		System.clearProperty("A.f1.ls");
 		System.setProperty("A.f1", "['foo','bar']");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.ls")).json().is("['foo','bar']");
+		assertObject(ps.getProperty("A.f1.ls")).asJson().is("['foo','bar']");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.ls"));
@@ -1487,12 +1487,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.li", "['2','1']");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.li")).json().is("[2,1]");
+		assertObject(ps.getProperty("A.f1.li")).asJson().is("[2,1]");
 
 		System.clearProperty("A.f1.li");
 		System.setProperty("A.f1", "['2','1']");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.li")).json().is("[2,1]");
+		assertObject(ps.getProperty("A.f1.li")).asJson().is("[2,1]");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.li"));
@@ -1503,12 +1503,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.sms", "{foo:'bar',baz:null}");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.sms")).json().is("{foo:'bar'}");
+		assertObject(ps.getProperty("A.f1.sms")).asJson().is("{foo:'bar'}");
 
 		System.clearProperty("A.f1.sms");
 		System.setProperty("A.f1", "{foo:'bar',baz:null}");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.sms")).json().is("{foo:'bar'}");
+		assertObject(ps.getProperty("A.f1.sms")).asJson().is("{foo:'bar'}");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.sms"));
@@ -1519,12 +1519,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.smi", "{foo:'123',baz:null}");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.smi")).json().is("{foo:123}");
+		assertObject(ps.getProperty("A.f1.smi")).asJson().is("{foo:123}");
 
 		System.clearProperty("A.f1.smi");
 		System.setProperty("A.f1", "{foo:'123',baz:null}");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.smi")).json().is("{foo:123}");
+		assertObject(ps.getProperty("A.f1.smi")).asJson().is("{foo:123}");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.smi"));
@@ -1535,12 +1535,12 @@ public class PropertyStoreTest {
 
 		System.setProperty("A.f1.smo", "{foo:123,bar:'baz',qux:true,quux:null}");
 		PropertyStore ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.smo")).json().is("{bar:'baz',foo:123,qux:true}");
+		assertObject(ps.getProperty("A.f1.smo")).asJson().is("{bar:'baz',foo:123,qux:true}");
 
 		System.clearProperty("A.f1.smo");
 		System.setProperty("A.f1", "{foo:123,bar:'baz',qux:true,quux:null}");
 		ps = PropertyStore.create().build();
-		assertObject(ps.getProperty("A.f1.smo")).json().is("{bar:'baz',foo:123,qux:true}");
+		assertObject(ps.getProperty("A.f1.smo")).asJson().is("{bar:'baz',foo:123,qux:true}");
 
 		System.clearProperty("A.f1");
 		assertNull(ps.getProperty("A.f1.smo"));
@@ -1557,7 +1557,7 @@ public class PropertyStoreTest {
 		b.set("A.foo", "bar");
 		PropertyStore ps1 = b.build();
 		b = ps1.builder();
-		assertObject(b.build()).json().is("{A:{foo:'bar'}}");
+		assertObject(b.build()).asJson().is("{A:{foo:'bar'}}");
 	}
 
 	@Test
@@ -1567,7 +1567,7 @@ public class PropertyStoreTest {
 		b.clear();
 		b.set(OMap.of("A.baz", "qux"));
 		b.add(null);
-		assertObject(b.build()).json().is("{A:{baz:'qux'}}");
+		assertObject(b.build()).asJson().is("{A:{baz:'qux'}}");
 	}
 
 	@Test
@@ -1577,14 +1577,14 @@ public class PropertyStoreTest {
 		b.add(OMap.of("A.baz", "qux"));
 		b.add(OMap.of("A.quux", null));
 		b.add(null);
-		assertObject(b.build()).json().is("{A:{baz:'qux',foo:'bar'}}");
+		assertObject(b.build()).asJson().is("{A:{baz:'qux',foo:'bar'}}");
 	}
 
 	@Test
 	public void testRemoveNotExisting() {
 		PropertyStoreBuilder b = PropertyStore.create();
 		b.removeFrom("A.foo.ls", "bar");
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -1592,16 +1592,16 @@ public class PropertyStoreTest {
 		PropertyStoreBuilder b = PropertyStore.create();
 		b.appendTo("A.foo.ls", null);
 		b.prependTo("A.foo.ls", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
 	public void testRemoveNull() {
 		PropertyStoreBuilder b = PropertyStore.create();
 		b.removeFrom("A.foo.ss", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 		b.removeFrom("A.foo.ls", null);
-		assertObject(b.build()).json().is("{}");
+		assertObject(b.build()).asJson().is("{}");
 	}
 
 	@Test
@@ -1670,9 +1670,9 @@ public class PropertyStoreTest {
 		b.set("A.foo", "bar").set("B.foo", "bar").set("D.foo", "bar");
 		PropertyStore ps = b.build();
 
-		assertObject(ps.getPropertyKeys(null)).json().is("[]");
-		assertObject(ps.getPropertyKeys("A")).json().is("['foo']");
-		assertObject(ps.getPropertyKeys("C")).json().is("[]");
+		assertObject(ps.getPropertyKeys(null)).asJson().is("[]");
+		assertObject(ps.getPropertyKeys("A")).asJson().is("['foo']");
+		assertObject(ps.getPropertyKeys("C")).asJson().is("[]");
 	}
 
 	@Test
@@ -1699,7 +1699,7 @@ public class PropertyStoreTest {
 		b = ps.builder();
 		ps = b.build();
 
-		assertObject(ps).json().is("{A:{'foo.b':true,'foo.c':'java.lang.String','foo.i':123,'foo.lc':['java.lang.String'],'foo.li':[123],'foo.lo':['java.lang.StringBuilder'],'foo.ls':['bar'],'foo.o':'bar','foo.s':'bar','foo.sc':['java.lang.String'],'foo.si':[123],'foo.smc':{foo:'java.lang.String'},'foo.smi':{foo:123},'foo.smo':{foo:'java.lang.StringBuilder'},'foo.sms':{foo:'bar'},'foo.ss':['bar']}}");
+		assertObject(ps).asJson().is("{A:{'foo.b':true,'foo.c':'java.lang.String','foo.i':123,'foo.lc':['java.lang.String'],'foo.li':[123],'foo.lo':['java.lang.StringBuilder'],'foo.ls':['bar'],'foo.o':'bar','foo.s':'bar','foo.sc':['java.lang.String'],'foo.si':[123],'foo.smc':{foo:'java.lang.String'},'foo.smi':{foo:123},'foo.smo':{foo:'java.lang.StringBuilder'},'foo.sms':{foo:'bar'},'foo.ss':['bar']}}");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
index c884160..1df6640 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
@@ -48,7 +48,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void a01_beanpOnPrimitiveFields_serializer() throws Exception {
-		assertObject(A.create()).json().is("{f1:1}");
+		assertObject(A.create()).asJson().is("{f1:1}");
 	}
 
 	@Test
@@ -80,7 +80,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void b01_beanAnnotation_serializer() throws Exception {
-		assertObject(B.create()).json().is("{f1:1}");
+		assertObject(B.create()).asJson().is("{f1:1}");
 	}
 
 	@Test
@@ -111,7 +111,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void b01_beanAnnotation_serializer_usingConfig() throws Exception {
-		assertObject(B.create()).json().is("{f1:1}");
+		assertObject(B.create()).asJson().is("{f1:1}");
 	}
 
 	@Test
@@ -237,7 +237,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void d01_beanAnnotation_bproAll_serializer() throws Exception {
-		assertObject(D.create()).json().is("{f1:1,f2:2}");
+		assertObject(D.create()).asJson().is("{f1:1,f2:2}");
 	}
 
 	@Test
@@ -264,7 +264,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void d03_beanAnnotation_bproAll_serializer_usingConfig() throws Exception {
-		assertObject(Dc.create()).serialized(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(DcConfig.class).build()).is("{f1:1,f2:2}");
+		assertObject(Dc.create()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(DcConfig.class).build()).is("{f1:1,f2:2}");
 	}
 
 	@Test
@@ -293,7 +293,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void e01_beanAnnotation_bpwoAll_serializer() throws Exception {
-		assertObject(E.create()).json().is("{}");
+		assertObject(E.create()).asJson().is("{}");
 	}
 
 	@Test
@@ -320,7 +320,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void e03_beanAnnotation_bpwoAll_serializer_usingConfig() throws Exception {
-		assertObject(E.create()).serialized(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(EcConfig.class).build()).is("{}");
+		assertObject(E.create()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(EcConfig.class).build()).is("{}");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
index 243912f..bf3b822 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanInheritanceTest.java
@@ -43,7 +43,7 @@ public class RoundTripBeanInheritanceTest extends RoundTripTest {
 		A2 t1 = new A2(), t2;
 		t1.init();
 		t2 = roundTrip(t1, A2.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 
 		A3 t3 = new A3();
 		t3.init();
@@ -145,7 +145,7 @@ public class RoundTripBeanInheritanceTest extends RoundTripTest {
 	public void testBeanInheritance2() throws Exception {
 		B1 t1 = new B1().init(), t2;
 		t2 = roundTrip(t1, B1.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 	}
 
 	public static class B1 extends B2 {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index 708ce2d..91c4e01 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -214,19 +214,19 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(b1);
 		B b = p.parse(r, B.class);
 		assertTrue(b instanceof B1);
-		assertObject(b).serialized(js).is("{_type:'B1',f0:'f0',f1:'f1'}");
+		assertObject(b).asString(js).is("{_type:'B1',f0:'f0',f1:'f1'}");
 
 		B2 b2 = B2.create();
 		r = s.serialize(b2);
 		b = p.parse(r, B.class);
 		assertTrue(b instanceof B2);
-		assertObject(b).serialized(js).is("{_type:'B2',f0:'f0',f2:1}");
+		assertObject(b).asString(js).is("{_type:'B2',f0:'f0',f2:1}");
 
 		B3 b3 = B3.create();
 		r = s.serialize(b3);
 		b = p.parse(r, B.class);
 		assertTrue(b instanceof B3);
-		assertObject(b).serialized(js).is("{_type:'B3',f0:'f0',f3:'2001-01-01T12:34:56.789Z'}");
+		assertObject(b).asString(js).is("{_type:'B3',f0:'f0',f3:'2001-01-01T12:34:56.789Z'}");
 }
 
 	@Bean(
@@ -287,19 +287,19 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(c1);
 		C c = p.parse(r, C.class);
 		assertTrue(c instanceof C1);
-		assertObject(c).serialized(js).is("{f0:'f0',f1:'f1'}");
+		assertObject(c).asString(js).is("{f0:'f0',f1:'f1'}");
 
 		C2 c2 = C2.create();
 		r = s.serialize(c2);
 		c = p.parse(r, C.class);
 		assertTrue(c instanceof C2);
-		assertObject(c).serialized(js).is("{f0:'f0',f2:1}");
+		assertObject(c).asString(js).is("{f0:'f0',f2:1}");
 
 		C3 c3 = C3.create();
 		r = s.serialize(c3);
 		c = p.parse(r, C.class);
 		assertTrue(c instanceof C3);
-		assertObject(c).serialized(js).is("{f0:'f0',f3:'2001-01-01T12:34:56.789Z'}");
+		assertObject(c).asString(js).is("{f0:'f0',f3:'2001-01-01T12:34:56.789Z'}");
 	}
 
 	public abstract static class C {
@@ -360,7 +360,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(ba1);
 		BA b = p.parse(r, BA.class);
 		assertTrue(b instanceof BA1);
-		assertObject(b).json().is("{f0a:'f0a',f0b:'f0b',f1:'f1'}");
+		assertObject(b).asJson().is("{f0a:'f0a',f0b:'f0b',f1:'f1'}");
 	}
 
 	@Bean(dictionary={BA1.class,BA2.class})
@@ -402,7 +402,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(c1);
 		CA c = p.parse(r, CA.class);
 		assertTrue(c instanceof CA1);
-		assertObject(c).json().is("{f0a:'f0a',f0b:'f0b',f1:'f1'}");
+		assertObject(c).asJson().is("{f0a:'f0a',f0b:'f0b',f1:'f1'}");
 	}
 
 	public abstract static class CA {
@@ -447,7 +447,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(d);
 		d = p.parse(r, D1.class);
 		assertNull(d.f1);
-		assertObject(d).json().is("{f3:'f3',f2:'f2'}");
+		assertObject(d).asJson().is("{f3:'f3',f2:'f2'}");
 	}
 
 	@Bean(p="f3,f2")
@@ -479,7 +479,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(d);
 		d = p.parse(r, D2.class);
 		assertNull(d.f1);
-		assertObject(d).serialized(js).is("{f3:'f3',f2:'f2'}");
+		assertObject(d).asString(js).is("{f3:'f3',f2:'f2'}");
 	}
 
 	public static class D2 {
@@ -507,7 +507,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		E1 e = new E1().init();
 		Object r = s.serialize(e);
 		e = p.parse(r, E1.class);
-		assertObject(e).json().is("{f1:'f1',f3:'f3'}");
+		assertObject(e).asJson().is("{f1:'f1',f3:'f3'}");
 	}
 
 	@Bean(excludeProperties="f2")
@@ -536,7 +536,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		E2 e = new E2().init();
 		Object r = s.serialize(e);
 		e = p.parse(r, E2.class);
-		assertObject(e).json().is("{f1:'f1',f3:'f3'}");
+		assertObject(e).asJson().is("{f1:'f1',f3:'f3'}");
 	}
 
 	public static class E2 {
@@ -564,7 +564,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		FA2 t = new FA2().init();
 		Object r = s.serialize(t);
 		t = p.parse(r, FA2.class);
-		assertObject(t).json().is("{f1:'f1'}");
+		assertObject(t).asJson().is("{f1:'f1'}");
 	}
 
 	@Bean(interfaceClass=FA1.class)
@@ -602,7 +602,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		t = new FB2().init();
 		r = s.build().serialize(t);
 		t = p.build().parse(r, FB2.class);
-		assertObject(t).json().is("{f1:'f1'}");
+		assertObject(t).asJson().is("{f1:'f1'}");
 
 		// --- BeanFilter defined on child class class ---
 		s.interfaces(FB1.class);
@@ -611,7 +611,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		t = new FB2().init();
 		r = s.build().serialize(t);
 		t = p.build().parse(r, FB2.class);
-		assertObject(t).json().is("{f1:'f1'}");
+		assertObject(t).asJson().is("{f1:'f1'}");
 
 		// --- BeanFilter defined as plain class ---
 		s.interfaces(FB1.class);
@@ -620,7 +620,7 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		t = new FB2().init();
 		r = s.build().serialize(t);
 		t = p.build().parse(r, FB2.class);
-		assertObject(t).json().is("{f1:'f1'}");
+		assertObject(t).asJson().is("{f1:'f1'}");
 	}
 
 	public static class FB1 {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
index 3cd4686..97c2879 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripClassesTest.java
@@ -40,14 +40,14 @@ public class RoundTripClassesTest extends RoundTripTest {
 
 		o = new Class[]{String.class};
 		o = roundTrip(o);
-		assertObject(o).json().is("['java.lang.String']");
+		assertObject(o).asJson().is("['java.lang.String']");
 
 		o = AList.of(String.class, Integer.class);
 		o = roundTrip(o);
-		assertObject(o).json().is("['java.lang.String','java.lang.Integer']");
+		assertObject(o).asJson().is("['java.lang.String','java.lang.Integer']");
 
 		o = AMap.of(String.class,String.class);
 		o = roundTrip(o);
-		assertObject(o).json().is("{'java.lang.String':'java.lang.String'}");
+		assertObject(o).asJson().is("{'java.lang.String':'java.lang.String'}");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
index c024fd7..6d24191 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripDTOsTest.java
@@ -38,13 +38,13 @@ public class RoundTripDTOsTest extends RoundTripTest {
 	public void testJsonSchema1() throws Exception {
 		JsonSchema s = JsonSchemaTest.getTest1();
 		JsonSchema s2 = roundTrip(s, JsonSchema.class);
-		assertObject(s).sameAs(s2);
+		assertObject(s).isSameJsonAs(s2);
 	}
 
 	@Test
 	public void testJsonSchema2() throws Exception {
 		JsonSchema s = JsonSchemaTest.getTest2();
 		JsonSchema s2 = roundTrip(s, JsonSchema.class);
-		assertObject(s).sameAs(s2);
+		assertObject(s).isSameJsonAs(s2);
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
index 142116b..75a1f90 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripEnumTest.java
@@ -41,7 +41,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	@Test
 	public void testEnumA() throws Exception {
 		AEnum t = AEnum.FOO;
-		assertObject(t).json().is("'FOO'");
+		assertObject(t).asJson().is("'FOO'");
 		t = roundTrip(t, AEnum.class);
 		assertEquals(AEnum.FOO, t);
 	}
@@ -61,7 +61,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	@Test
 	public void testEnumArrayA() throws Exception {
 		AEnum[] t = {AEnum.FOO,AEnum.BAR,null};
-		assertObject(t).json().is("['FOO','BAR',null]");
+		assertObject(t).asJson().is("['FOO','BAR',null]");
 		t = roundTrip(t, AEnum[].class);
 		assertEquals(AEnum.FOO, t[0]);
 		assertEquals(AEnum.BAR, t[1]);
@@ -71,7 +71,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	@Test
 	public void testEnumArrayB() throws Exception {
 		BEnum[] t = {BEnum.FOO,BEnum.BAR,null};
-		assertObject(t).json().is("['xfoo','xbar',null]");
+		assertObject(t).asJson().is("['xfoo','xbar',null]");
 		t = roundTrip(t, BEnum[].class);
 		assertEquals(BEnum.FOO, t[0]);
 		assertEquals(BEnum.BAR, t[1]);
@@ -84,7 +84,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	@Test
 	public void testEnum2dArrayA() throws Exception {
 		AEnum[][] t = {{AEnum.FOO,AEnum.BAR,null},null};
-		assertObject(t).json().is("[['FOO','BAR',null],null]");
+		assertObject(t).asJson().is("[['FOO','BAR',null],null]");
 		t = roundTrip(t, AEnum[][].class);
 		assertEquals(AEnum.FOO, t[0][0]);
 		assertEquals(AEnum.BAR, t[0][1]);
@@ -95,7 +95,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	@Test
 	public void testEnum2dArrayB() throws Exception {
 		BEnum[][] t = {{BEnum.FOO,BEnum.BAR,null},null};
-		assertObject(t).json().is("[['xfoo','xbar',null],null]");
+		assertObject(t).asJson().is("[['xfoo','xbar',null],null]");
 		t = roundTrip(t, BEnum[][].class);
 		assertEquals(BEnum.FOO, t[0][0]);
 		assertEquals(BEnum.BAR, t[0][1]);
@@ -110,7 +110,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	public void testBeansWithEnumA() throws Exception {
 		A t1 = new A().init(), t2;
 		t2 = roundTrip(t1, A.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 		assertEquals(AEnum.FOO, t2.f3[0]);
 		assertNull(t2.f3[1]);
 		assertEquals(AEnum.FOO, t2.f4[0][0]);
@@ -122,7 +122,7 @@ public class RoundTripEnumTest extends RoundTripTest {
 	public void testBeansWithEnumB() throws Exception {
 		B t1 = new B().init(), t2;
 		t2 = roundTrip(t1, B.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 		assertEquals(BEnum.FOO, t2.f3[0]);
 		assertNull(t2.f3[1]);
 		assertEquals(BEnum.FOO, t2.f4[0][0]);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
index 0cfb0bd..ac92ee6 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripGenericsTest.java
@@ -46,14 +46,14 @@ public class RoundTripGenericsTest extends RoundTripTest {
 		// During parsing, these become OMaps.
 		Pair pair = new Pair<>(new Source().init(), new Target().init());
 		pair = roundTrip(pair);
-		assertObject(pair).jsonSorted().is("{s:{s1:'a1'},t:{t1:'b1'}}");
+		assertObject(pair).asJsonSorted().is("{s:{s1:'a1'},t:{t1:'b1'}}");
 		assertEquals("OMap", pair.getS().getClass().getSimpleName());
 		assertEquals("OMap", pair.getT().getClass().getSimpleName());
 
 		// If you specify a concrete class, the type variables become bound and
 		// the property types correctly resolve.
 		pair = roundTrip(pair, RealPair.class);
-		assertObject(pair).jsonSorted().is("{s:{s1:'a1'},t:{t1:'b1'}}");
+		assertObject(pair).asJsonSorted().is("{s:{s1:'a1'},t:{t1:'b1'}}");
 		assertEquals("Source", pair.getS().getClass().getSimpleName());
 		assertEquals("Target", pair.getT().getClass().getSimpleName());
 	}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
index 5c59301..477f6bd 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsAsStringsTest.java
@@ -45,7 +45,7 @@ public class RoundTripObjectsAsStringsTest extends RoundTripTest {
 	public void testBasic() throws Exception {
 		A t = new A().init();
 		t = roundTrip(t);
-		assertObject(t).json().is("{a1:{f:'1'},a2:{f:'2'},a3:{f:'3'},a4:{f:'4'}}");
+		assertObject(t).asJson().is("{a1:{f:'1'},a2:{f:'2'},a3:{f:'3'},a4:{f:'4'}}");
 	}
 
 	public static class A {
@@ -131,7 +131,7 @@ public class RoundTripObjectsAsStringsTest extends RoundTripTest {
 			assertTrue(toString(r).contains("X-2"));
 		}
 		t = roundTrip(t);
-		assertObject(t).json().is("{b1:'X1',b2:'X-2'}");
+		assertObject(t).asJson().is("{b1:'X1',b2:'X-2'}");
 	}
 
 	public static class B {
@@ -184,7 +184,7 @@ public class RoundTripObjectsAsStringsTest extends RoundTripTest {
 	public void testOrdering() throws Exception {
 		C t = new C().init();
 		t = roundTrip(t);
-		assertObject(t).json().is("{c1:{f:'1'},c2:{f:'2'},c3:{f:'3'},c4:{f:'4'}}");
+		assertObject(t).asJson().is("{c1:{f:'1'},c2:{f:'2'},c3:{f:'3'},c4:{f:'4'}}");
 	}
 
 	public static class C {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
index 75e8473..79598db 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripObjectsWithSpecialMethodsTest.java
@@ -41,7 +41,7 @@ public class RoundTripObjectsWithSpecialMethodsTest extends RoundTripTest {
 	public void testNameProperty() throws Exception {
 		A t = new A().init();
 		t = roundTrip(t);
-		assertObject(t).json().is("{a2:{f2:2},m:{k1:{f2:2}}}");
+		assertObject(t).asJson().is("{a2:{f2:2},m:{k1:{f2:2}}}");
 		if (isValidationOnly())
 			return;
 		assertEquals("a2", t.a2.name);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
index c76ebdb..6142acb 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
@@ -515,7 +515,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 		assertEquals("{c:'2018-12-12T05:12:00'}", r);
 
 		x = p.parse(r, F1.class);
-		assertObject(x).json().is("{c:'2018-12-12T05:12:00'}");
+		assertObject(x).asJson().is("{c:'2018-12-12T05:12:00'}");
 
 		x = roundTrip(x, F1.class);
 	}
@@ -556,7 +556,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 		assertEquals("{c:'2018-12-12T05:12:00'}", r);
 
 		x = p.parse(r, F1c.class);
-		assertObject(x).serialized(s).is("{c:'2018-12-12T05:12:00'}");
+		assertObject(x).asString(s).is("{c:'2018-12-12T05:12:00'}");
 
 		x = roundTrip(x, F1c.class);
 	}
@@ -597,7 +597,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 		assertEquals("{c:'2018-12-12T05:12:00'}", r);
 
 		x = p.parse(r, F2.class);
-		assertObject(x).json().is("{c:'2018-12-12T05:12:00'}");
+		assertObject(x).asJson().is("{c:'2018-12-12T05:12:00'}");
 
 		x = roundTrip(x, F2.class);
 	}
@@ -640,7 +640,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 		assertEquals("{c:'2018-12-12T05:12:00'}", r);
 
 		x = p.parse(r, F2.class);
-		assertObject(x).serialized(s).is("{c:'2018-12-12T05:12:00'}");
+		assertObject(x).asString(s).is("{c:'2018-12-12T05:12:00'}");
 
 		x = roundTrip(x, F2.class);
 	}
@@ -673,7 +673,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 	public void testBeanWithIncompleteCopyConstructor() throws Exception {
 		F f = F.create();
 		f = roundTrip(f);
-		assertObject(f).json().is("{f1:1,f2:2}");
+		assertObject(f).asJson().is("{f1:1,f2:2}");
 	}
 
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
index d94b93c..51431c9 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
@@ -47,30 +47,30 @@ public class RoundTripTrimStringsTest extends RoundTripTest {
 		in = " foo bar ";
 		e = "foo bar";
 		a = p.parse(s2.serialize(in), String.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 		a = p2.parse(s.serialize(in), String.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 
 		in = OMap.ofJson("{' foo ': ' bar '}");
 		e = OMap.ofJson("{foo:'bar'}");
 		a = p.parse(s2.serialize(in), OMap.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 		a = p2.parse(s.serialize(in), OMap.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 
 		in = new OList("[' foo ', {' foo ': ' bar '}]");
 		e = new OList("['foo',{foo:'bar'}]");
 		a = p.parse(s2.serialize(in), OList.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 		a = p2.parse(s.serialize(in), OList.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 
 		in = new A().init1();
 		e = new A().init2();
 		a = p.parse(s2.serialize(in), A.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 		a = p2.parse(s.serialize(in), A.class);
-		assertObject(e).sameAs(a);
+		assertObject(e).isSameJsonAs(a);
 	}
 
 	public static class A {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RountTripBeansWithBuilders.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RountTripBeansWithBuilders.java
index fcc6552..68c8697 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RountTripBeansWithBuilders.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RountTripBeansWithBuilders.java
@@ -43,7 +43,7 @@ public class RountTripBeansWithBuilders extends RoundTripTest {
 	public void simple() throws Exception {
 		A a = A.create().f1(1).build();
 		a = roundTrip(a, A.class);
-		assertObject(a).json().is("{f1:1}");
+		assertObject(a).asJson().is("{f1:1}");
 	}
 
 	public static class A {
@@ -80,7 +80,7 @@ public class RountTripBeansWithBuilders extends RoundTripTest {
 	public void simple_usingConfig() throws Exception {
 		Ac a = Ac.create().f1(1).build();
 		a = roundTrip(a, Ac.class);
-		assertObject(a).json().is("{f1:1}");
+		assertObject(a).asJson().is("{f1:1}");
 	}
 
 	@Bean(on="Dummy1", findFluentSetters=true)
@@ -125,7 +125,7 @@ public class RountTripBeansWithBuilders extends RoundTripTest {
 	public void beanPropertyBuilder_simple() throws Exception {
 		A2 a = A2.create().f1(A.create().f1(1).build()).build();
 		a = roundTrip(a, A2.class);
-		assertObject(a).json().is("{f1:{f1:1}}");
+		assertObject(a).asJson().is("{f1:{f1:1}}");
 	}
 
 	public static class A2 {
@@ -180,7 +180,7 @@ public class RountTripBeansWithBuilders extends RoundTripTest {
 			.f9(singletonMap("foo", singletonList(new A[]{A.create().f1(9).build()})))
 			.build();
 		a = roundTrip(a, A3.class);
-		assertObject(a).json().is("{f1:[{f1:1}],f2:[{f1:2}],f3:[[{f1:3}]],f4:[[{f1:4}]],f5:[[[{f1:5}]]],f6:{foo:{f1:6}},f7:{foo:{bar:{f1:7}}},f8:{foo:[{f1:8}]},f9:{foo:[[{f1:9}]]}}");
+		assertObject(a).asJson().is("{f1:[{f1:1}],f2:[{f1:2}],f3:[[{f1:3}]],f4:[[{f1:4}]],f5:[[[{f1:5}]]],f6:{foo:{f1:6}},f7:{foo:{bar:{f1:7}}},f8:{foo:[{f1:8}]},f9:{foo:[[{f1:9}]]}}");
 	}
 
 	@Bean(sort=true)
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
index c73f717..f05de4d 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
@@ -82,7 +82,7 @@ public class BeanAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "dictionary:['"+CNAME+"$X1'],"
 				+ "example:'example',"
@@ -138,8 +138,8 @@ public class BeanAnnotation_Test {
 		Bean c1 = BeanAnnotation.create(C1.class).on(C2.class).build();
 		Bean c2 = BeanAnnotation.create("a").on("b").build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnoreAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnoreAnnotation_Test.java
index 9494002..ef79f65 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnoreAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnoreAnnotation_Test.java
@@ -42,7 +42,7 @@ public class BeanIgnoreAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['a'],"
 				+ "onClass:['"+CNAME+"$X1']"
@@ -88,11 +88,11 @@ public class BeanIgnoreAnnotation_Test {
 		BeanIgnore c4 = BeanIgnoreAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 		BeanIgnore c5 = BeanIgnoreAnnotation.create().on(C1.class.getConstructor()).on(C2.class.getConstructor()).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
-		assertObject(c5).json().contains("on:['"+CNAME+"$C1()','"+CNAME+"$C2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c5).asJson().contains("on:['"+CNAME+"$C1()','"+CNAME+"$C2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
index ef7b7c5..756e0d3 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
@@ -42,7 +42,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnProperties() throws Exception {
-		assertObject(new A()).json().is("{c:'c',a:'a'}");
+		assertObject(new A()).asJson().is("{c:'c',a:'a'}");
 	}
 
 	@BeanIgnore(on="Ac.getB")
@@ -65,7 +65,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnProperties_usingConfig() throws Exception {
-		assertObject(new Ac()).serialized(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(AcConfig.class).build()).is("{c:'c',a:'a'}");
+		assertObject(new Ac()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(AcConfig.class).build()).is("{c:'c',a:'a'}");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
@@ -93,7 +93,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnBean() throws Exception {
-		assertObject(new B()).json().is("{f2:2,f3:'xxx',f4:'xxx'}");
+		assertObject(new B()).asJson().is("{f2:2,f3:'xxx',f4:'xxx'}");
 	}
 
 	@BeanIgnore(on="B1c")
@@ -119,7 +119,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnBean_usingConfig() throws Exception {
-		assertObject(new Bc()).serialized(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(B1cConfig.class).build()).is("{f2:2,f3:'xxx',f4:'xxx'}");
+		assertObject(new Bc()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(B1cConfig.class).build()).is("{f2:2,f3:'xxx',f4:'xxx'}");
 	}
 }
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeancAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeancAnnotation_Test.java
index 3130679..85adf02 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeancAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeancAnnotation_Test.java
@@ -40,7 +40,7 @@ public class BeancAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on'],"
 				+ "properties:'properties'"
@@ -77,8 +77,8 @@ public class BeancAnnotation_Test {
 		Beanc c1 = BeancAnnotation.create("a").on("b").build();
 		Beanc c2 = BeancAnnotation.create().on(C1.class.getConstructor()).on(C2.class.getConstructor()).build();
 
-		assertObject(c1).json().contains("on:['a','b']");
-		assertObject(c2).json().contains("on:['"+CNAME+"$C1()','"+CNAME+"$C2()']");
+		assertObject(c1).asJson().contains("on:['a','b']");
+		assertObject(c2).asJson().contains("on:['"+CNAME+"$C1()','"+CNAME+"$C2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanpAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanpAnnotation_Test.java
index 1a3147a..10ea6ea 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanpAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/BeanpAnnotation_Test.java
@@ -58,7 +58,7 @@ public class BeanpAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "dictionary:['"+CNAME+"$X1'],"
 				+ "format:'format',"
@@ -110,9 +110,9 @@ public class BeanpAnnotation_Test {
 		Beanp c2 = BeanpAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Beanp c3 = BeanpAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['a','b']");
-		assertObject(c2).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['a','b']");
+		assertObject(c2).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ExampleAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ExampleAnnotation_Test.java
index af4fdcf..aad5f1b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ExampleAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ExampleAnnotation_Test.java
@@ -44,7 +44,7 @@ public class ExampleAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on'],"
 				+ "onClass:['"+CNAME+"$X1'],"
@@ -90,10 +90,10 @@ public class ExampleAnnotation_Test {
 		Example c3 = ExampleAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Example c4 = ExampleAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
index 4fa0429..3cfcdae 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
@@ -46,7 +46,7 @@ public class MarshalledAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "example:'example',"
 				+ "implClass:'"+CNAME+"$X1',"
@@ -91,8 +91,8 @@ public class MarshalledAnnotation_Test {
 		Marshalled c1 = MarshalledAnnotation.create(C1.class).on(C2.class).build();
 		Marshalled c2 = MarshalledAnnotation.create("a").on("b").build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/NamePropertyAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/NamePropertyAnnotation_Test.java
index 31745e2..31207d3 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/NamePropertyAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/NamePropertyAnnotation_Test.java
@@ -38,7 +38,7 @@ public class NamePropertyAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on']"
 			+ "}"
@@ -81,9 +81,9 @@ public class NamePropertyAnnotation_Test {
 		NameProperty c2 = NamePropertyAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		NameProperty c3 = NamePropertyAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['a','b']");
-		assertObject(c2).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['a','b']");
+		assertObject(c2).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ParentPropertyAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ParentPropertyAnnotation_Test.java
index 6cab937..323bd6f 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ParentPropertyAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/ParentPropertyAnnotation_Test.java
@@ -38,7 +38,7 @@ public class ParentPropertyAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on']"
 			+ "}"
@@ -81,9 +81,9 @@ public class ParentPropertyAnnotation_Test {
 		ParentProperty c2 = ParentPropertyAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		ParentProperty c3 = ParentPropertyAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['a','b']");
-		assertObject(c2).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['a','b']");
+		assertObject(c2).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/SwapAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/SwapAnnotation_Test.java
index 8b72737..79b6bd2 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/SwapAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/SwapAnnotation_Test.java
@@ -50,7 +50,7 @@ public class SwapAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "impl:'"+CNAME+"$X1',"
 				+ "mediaTypes:['mediaTypes'],"
@@ -98,10 +98,10 @@ public class SwapAnnotation_Test {
 		Swap c3 = SwapAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Swap c4 = SwapAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/UriAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/UriAnnotation_Test.java
index 0128f0a..147519d 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/UriAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/annotation/UriAnnotation_Test.java
@@ -38,7 +38,7 @@ public class UriAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['a'],"
 				+ "onClass:[]"
@@ -83,10 +83,10 @@ public class UriAnnotation_Test {
 		Uri c3 = UriAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Uri c4 = UriAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
index acc759f..db3a552 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
@@ -22,7 +22,7 @@ public class ArrayAssertion_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
-		String[] x1={}, x2={"foo"};
+		String[] x1={}, x2={"foo","bar"};
 
 		assertThrown(()->assertArray(null).exists()).is("Value was null.");
 		assertArray(x1).exists();
@@ -32,9 +32,9 @@ public class ArrayAssertion_Test {
 
 		assertThrown(()->assertArray(null).isSize(0)).is("Value was null.");
 		assertArray(x1).isSize(0);
-		assertThrown(()->assertArray(x1).isSize(1)).is("Array did not have the expected size.  Expect=1, Actual=0.");
-		assertArray(x2).isSize(1);
-		assertThrown(()->assertArray(x2).isSize(0)).is("Array did not have the expected size.  Expect=0, Actual=1.");
+		assertThrown(()->assertArray(x1).isSize(2)).is("Array did not have the expected size.  Expect=2, Actual=0.");
+		assertArray(x2).isSize(2);
+		assertThrown(()->assertArray(x2).isSize(0)).is("Array did not have the expected size.  Expect=0, Actual=2.");
 
 		assertThrown(()->assertArray(null).isEmpty()).is("Value was null.");
 		assertArray(x1).isEmpty();
@@ -47,6 +47,13 @@ public class ArrayAssertion_Test {
 		assertArray(null).item(0).doesNotExist();
 		assertArray(x1).item(0).doesNotExist();
 		assertArray(x2).item(0).exists();
+
+		assertArray(x2).contains("foo");
+		assertThrown(()->assertArray(x2).contains("z")).is("Array did not contain expected value.\n\tContents: ['foo','bar']\n\tExpected: z");
+
+		assertArray(x1).doesNotContain("foo");
+		assertThrown(()->assertArray(x2).doesNotContain("foo")).is("Array contained unexpected value.\n\tContents: ['foo','bar']\n\tUnexpected: foo");
+		assertThrown(()->assertArray(x2).doesNotContain("bar")).is("Array contained unexpected value.\n\tContents: ['foo','bar']\n\tUnexpected: bar");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/Assertions_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/Assertions_Test.java
index ef37456..c506049 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/Assertions_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/Assertions_Test.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.runners.MethodSorters.*;
 
 import java.io.*;
+import java.time.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
@@ -26,35 +27,58 @@ public class Assertions_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
+
 		assertDate(new Date()).isAfter(new Date(0));
+
 		assertInteger(2).isGt(1);
+
 		assertLong(2l).isGt(1l);
-		assertObject("foo").json().is("'foo'");
+
+		assertObject("foo").asJson().is("'foo'");
+
 		assertString("foo").is("foo");
+
 		assertThrowable(null).doesNotExist();
+
 		assertArray(new String[0]).isEmpty();
+
 		assertCollection(AList.create()).isEmpty();
+
 		assertList(AList.create()).isEmpty();
-		assertStream(new ByteArrayInputStream("foo".getBytes())).string().is("foo");
-		assertStream((InputStream)null).string().doesNotExist();
-		assertStream(Optional.of(new ByteArrayInputStream("foo".getBytes()))).string().is("foo");
-		assertStream(Optional.empty()).string().doesNotExist();
-		assertBytes("foo".getBytes()).string().is("foo");
-		assertBytes((byte[])null).string().doesNotExist();
-		assertBytes(Optional.of("foo".getBytes())).string().is("foo");
-		assertBytes(Optional.empty()).string().doesNotExist();
+
+		assertStream(new ByteArrayInputStream("foo".getBytes())).asString().is("foo");
+		assertStream((InputStream)null).asString().doesNotExist();
+		assertStream(Optional.of(new ByteArrayInputStream("foo".getBytes()))).asString().is("foo");
+		assertStream(Optional.empty()).asString().doesNotExist();
+
+		assertBytes("foo".getBytes()).asString().is("foo");
+		assertBytes((byte[])null).asString().doesNotExist();
+		assertBytes(Optional.of("foo".getBytes())).asString().is("foo");
+		assertBytes(Optional.empty()).asString().doesNotExist();
+
 		assertReader(new StringReader("foo")).is("foo");
 		assertReader((Reader)null).doesNotExist();
 		assertReader(Optional.of(new StringReader("foo"))).is("foo");
 		assertReader(Optional.empty()).doesNotExist();
+
 		assertThrown(()->{throw new RuntimeException("foo");}).is("foo");
 		assertThrown(()->{}).doesNotExist();
 
+		assertZonedDateTime(ZonedDateTime.now()).exists();
+		assertZonedDateTime(Optional.of(ZonedDateTime.now())).exists();
+
+		assertBean("123").exists();
+		assertBean(Optional.of("123")).exists();
+
+		assertBoolean(true).isTrue();
+		assertBoolean(Optional.of(true)).isTrue();
+
 		new Assertions();
 	}
 
 	@Test
 	public void a02_stdout_stderr() throws Exception {
 		assertThrown(()->assertObject(null).msg("Test message").stderr().stdout().exists()).exists();
+		assertObject(assertObject("foo").stderr().stdout().error("test {0}", "message").getMessage()).is("test message");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/marshall/XmlTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BeanAssertion_Test.java
similarity index 66%
copy from juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/marshall/XmlTest.java
copy to juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BeanAssertion_Test.java
index 116ea07..d2ef0e9 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/marshall/XmlTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BeanAssertion_Test.java
@@ -10,48 +10,41 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.marshall;
+package org.apache.juneau.assertions;
 
 import static org.apache.juneau.assertions.Assertions.*;
-import static org.junit.Assert.assertEquals;
 import static org.junit.runners.MethodSorters.*;
 
-import java.io.*;
-import java.util.*;
-
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class XmlTest {
-
-	CharMarshall m = Xml.DEFAULT;
+public class BeanAssertion_Test {
 
-	@Test
-	public void write1() throws Exception {
-		assertEquals("<string>foo</string>", m.write("foo"));
+	public static class A {
+		public int f1 = 1, f2 = 2;
 	}
 
 	@Test
-	public void write2() throws Exception {
-		StringWriter sw = new StringWriter();
-		m.write("foo", sw);
-		assertEquals("<string>foo</string>", sw.toString());
-	}
+	public void a01_basic() throws Exception {
+		A a = new A();
 
-	@Test
-	public void toString1() throws Exception {
-		assertEquals("<string>foo</string>", m.toString("foo"));
-	}
+		assertThrown(()->assertBean((Object)null).exists()).is("Value was null.");
+		assertBean(a).exists();
 
-	@Test
-	public void read1() throws Exception {
-		String s = m.read("<string>foo</string>", String.class);
-		assertEquals("foo", s);
+		assertCollection(null).doesNotExist();
+		assertThrown(()->assertBean(a).doesNotExist()).is("Value was not null.");
+
+		assertBean(a).field("f1").asInteger().is(1);
+		assertBean(a).field("x").asInteger().isNull();
+		assertThrown(()->assertBean((Object)null).field("x")).is("Value was null.");
+
+		assertBean(a).fields("f2,f1").asJson().is("{f2:2,f1:1}");
+		assertBean(a).fields("x").asJson().is("{}");
 	}
 
 	@Test
-	public void read2() throws Exception {
-		Map<?,?> o = m.read("<object><foo>bar</foo></object>", Map.class, String.class, String.class);
-		assertObject(o).json().is("{foo:'bar'}");
+	public void a02_other() throws Exception {
+		assertThrown(()->BeanAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
+		BeanAssertion.create(null).stdout().stderr();
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BooleanAssertion_Test.java
similarity index 59%
copy from juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
copy to juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BooleanAssertion_Test.java
index acc759f..d6593a7 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/BooleanAssertion_Test.java
@@ -15,43 +15,42 @@ package org.apache.juneau.assertions;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.runners.MethodSorters.*;
 
+import static java.util.Optional.*;
+
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class ArrayAssertion_Test {
+public class BooleanAssertion_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
-		String[] x1={}, x2={"foo"};
 
-		assertThrown(()->assertArray(null).exists()).is("Value was null.");
-		assertArray(x1).exists();
+		assertThrown(()->assertBoolean((Boolean)null).exists()).is("Value was null.");
+		assertBoolean(true).exists();
+		assertThrown(()->assertBoolean(empty()).exists()).is("Value was null.");
+		assertBoolean(true).exists();
 
-		assertArray(null).doesNotExist();
-		assertThrown(()->assertArray(x1).doesNotExist()).is("Value was not null.");
+		assertBoolean(empty()).doesNotExist();
+		assertThrown(()->assertBoolean(true).doesNotExist()).is("Value was not null.");
 
-		assertThrown(()->assertArray(null).isSize(0)).is("Value was null.");
-		assertArray(x1).isSize(0);
-		assertThrown(()->assertArray(x1).isSize(1)).is("Array did not have the expected size.  Expect=1, Actual=0.");
-		assertArray(x2).isSize(1);
-		assertThrown(()->assertArray(x2).isSize(0)).is("Array did not have the expected size.  Expect=0, Actual=1.");
+		assertBoolean(empty()).isEqual(null);
+		assertBoolean(true).isEqual(true);
+		assertBoolean(of(true)).isEqual(true);
 
-		assertThrown(()->assertArray(null).isEmpty()).is("Value was null.");
-		assertArray(x1).isEmpty();
-		assertThrown(()->assertArray(x2).isEmpty()).is("Array was not empty.");
+		assertBoolean(true).isTrue();
+		assertThrown(()->assertBoolean(true).isFalse()).is("Value was true.");
+		assertBoolean(false).isFalse();
+		assertThrown(()->assertBoolean(false).isTrue()).is("Value was false.");
 
-		assertThrown(()->assertArray(null).isNotEmpty()).is("Value was null.");
-		assertThrown(()->assertArray(x1).isNotEmpty()).is("Array was empty.");
-		assertArray(x2).isNotEmpty();
+		assertThrown(()->assertBoolean(true).isEqual(false)).contains("Unexpected value.");
+		assertBoolean(empty()).isEqual(null);
 
-		assertArray(null).item(0).doesNotExist();
-		assertArray(x1).item(0).doesNotExist();
-		assertArray(x2).item(0).exists();
+		assertBoolean(true).isNot("true");
 	}
 
 	@Test
 	public void a02_other() throws Exception {
-		assertThrown(()->ArrayAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
-		ArrayAssertion.create(null).stdout().stderr();
+		assertThrown(()->BooleanAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
+		BooleanAssertion.create(null).stdout().stderr();
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
index 7094331..87444f5 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
@@ -55,25 +55,25 @@ public class ByteArrayAssertion_Test {
 		assertBytes(x1).item(0).doesNotExist();
 		assertBytes(x2).item(0).exists();
 
-		assertBytes(empty()).string().isNull();
-		assertBytes(x1).string().is("");
-		assertBytes(x2).string().is("ab");
-		assertThrown(()->assertBytes(x2).string().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[ab]");
+		assertBytes(empty()).asString().isNull();
+		assertBytes(x1).asString().is("");
+		assertBytes(x2).asString().is("ab");
+		assertThrown(()->assertBytes(x2).asString().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[ab]");
 
-		assertBytes(empty()).base64().isNull();
-		assertBytes(x1).base64().is("");
-		assertBytes(x2).base64().is("YWI=");
-		assertThrown(()->assertBytes(x2).base64().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[YWI=]");
+		assertBytes(empty()).asBase64().isNull();
+		assertBytes(x1).asBase64().is("");
+		assertBytes(x2).asBase64().is("YWI=");
+		assertThrown(()->assertBytes(x2).asBase64().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[YWI=]");
 
-		assertBytes(empty()).hex().isNull();
-		assertBytes(x1).hex().is("");
-		assertBytes(x2).hex().is("6162");
-		assertThrown(()->assertBytes(x2).hex().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[6162]");
+		assertBytes(empty()).asHex().isNull();
+		assertBytes(x1).asHex().is("");
+		assertBytes(x2).asHex().is("6162");
+		assertThrown(()->assertBytes(x2).asHex().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[6162]");
 
-		assertBytes(empty()).spacedHex().isNull();
-		assertBytes(x1).spacedHex().is("");
-		assertBytes(x2).spacedHex().is("61 62");
-		assertThrown(()->assertBytes(x2).spacedHex().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[61 62]");
+		assertBytes(empty()).asSpacedHex().isNull();
+		assertBytes(x1).asSpacedHex().is("");
+		assertBytes(x2).asSpacedHex().is("61 62");
+		assertThrown(()->assertBytes(x2).asSpacedHex().is("xx")).is("Unexpected value.\n\tExpect=[xx]\n\tActual=[61 62]");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
index 3aff4d2..8edb22b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
@@ -47,6 +47,11 @@ public class CollectionAssertion_Test {
 		assertThrown(()->assertCollection(x1).isNotEmpty()).is("Collection was empty.");
 		assertCollection(x2).isNotEmpty();
 
+		assertCollection(x2).contains("a");
+		assertThrown(()->assertCollection(x2).contains("z")).is("Collection did not contain expected value.\n\tContents: ['a','b']\n\tExpected: z");
+
+		assertCollection(x1).doesNotContain("a");
+		assertThrown(()->assertCollection(x2).doesNotContain("a")).is("Collection contained unexpected value.\n\tContents: ['a','b']\n\tUnexpected: a");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentIntegerAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/IntegerAssertion_Test.java
similarity index 98%
rename from juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentIntegerAssertion_Test.java
rename to juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/IntegerAssertion_Test.java
index 6cffea1..35cb114 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentIntegerAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/IntegerAssertion_Test.java
@@ -20,7 +20,7 @@ import static java.util.Optional.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class FluentIntegerAssertion_Test {
+public class IntegerAssertion_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
@@ -96,6 +96,8 @@ public class FluentIntegerAssertion_Test {
 		assertInteger(3).isBetween(1,3);
 		assertThrown(()->assertInteger(2).isBetween(1,1)).is("Value was not less than or equals to expected.\n\tExpect=[1]\n\tActual=[2]");
 		assertThrown(()->assertInteger(2).isBetween(3,3)).is("Value was not greater than or equals to expected.\n\tExpect=[3]\n\tActual=[2]");
+
+		assertInteger(2).isNot("2");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentLongAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/LongAssertion_Test.java
similarity index 97%
rename from juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentLongAssertion_Test.java
rename to juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/LongAssertion_Test.java
index 3074d40..3d11fce 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/FluentLongAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/LongAssertion_Test.java
@@ -19,7 +19,7 @@ import static java.util.Optional.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class FluentLongAssertion_Test {
+public class LongAssertion_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
@@ -45,8 +45,8 @@ public class FluentLongAssertion_Test {
 		assertThrown(()->assertLong(1l).isGreaterThan(2l)).is("Value was not greater than expected.\n\tExpect=[2]\n\tActual=[1]");
 		assertThrown(()->assertLong(1l).isGreaterThan(1l)).is("Value was not greater than expected.\n\tExpect=[1]\n\tActual=[1]");
 
-		assertLong(2l).integer().isGreaterThan(1);
-		assertLong(empty()).integer().isNull();
+		assertLong(2l).asInteger().isGreaterThan(1);
+		assertLong(empty()).asInteger().isNull();
 
 		assertThrown(()->assertLong(empty()).isGt(1l)).is("Value was null.");
 		assertThrown(()->assertLong(1l).isGt(null)).is("Parameter 'value' cannot be null.");
@@ -98,6 +98,8 @@ public class FluentLongAssertion_Test {
 		assertLong(3l).isBetween(1,3);
 		assertThrown(()->assertLong(2l).isBetween(1,1)).is("Value was not less than or equals to expected.\n\tExpect=[1]\n\tActual=[2]");
 		assertThrown(()->assertLong(2l).isBetween(3,3)).is("Value was not greater than or equals to expected.\n\tExpect=[3]\n\tActual=[2]");
+
+		assertLong(2l).isNot("2");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/MapAssertion_Test.java
similarity index 52%
copy from juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
copy to juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/MapAssertion_Test.java
index 3aff4d2..b151755 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/MapAssertion_Test.java
@@ -21,37 +21,48 @@ import org.apache.juneau.collections.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class CollectionAssertion_Test {
+public class MapAssertion_Test {
 
 	@Test
 	public void a01_basic() throws Exception {
-		List<String> x1 = AList.create(), x2 = AList.of("a","b");
+		Map<String,Integer> x1 = AMap.create(), x2 = AMap.of("a",1,"b",2);
 
-		assertThrown(()->assertCollection(null).exists()).is("Value was null.");
-		assertCollection(x1).exists();
+		assertThrown(()->assertMap(null).exists()).is("Value was null.");
+		assertMap(x1).exists();
 
 		assertCollection(null).doesNotExist();
-		assertThrown(()->assertCollection(x1).doesNotExist()).is("Value was not null.");
+		assertThrown(()->assertMap(x1).doesNotExist()).is("Value was not null.");
 
-		assertThrown(()->assertCollection(null).isSize(0)).is("Value was null.");
-		assertCollection(x1).isSize(0);
-		assertThrown(()->assertCollection(x1).isSize(1)).is("Collection did not have the expected size.  Expect=1, Actual=0.");
-		assertCollection(x2).isSize(2);
-		assertThrown(()->assertCollection(x2).isSize(0)).is("Collection did not have the expected size.  Expect=0, Actual=2.");
+		assertThrown(()->assertMap(null).isSize(0)).is("Value was null.");
+		assertMap(x1).isSize(0);
+		assertThrown(()->assertMap(x1).isSize(1)).is("Map did not have the expected size.  Expect=1, Actual=0.");
+		assertMap(x2).isSize(2);
+		assertThrown(()->assertMap(x2).isSize(0)).is("Map did not have the expected size.  Expect=0, Actual=2.");
 
-		assertThrown(()->assertCollection(null).isEmpty()).is("Value was null.");
-		assertCollection(x1).isEmpty();
-		assertThrown(()->assertCollection(x2).isEmpty()).is("Collection was not empty.");
+		assertThrown(()->assertMap(null).isEmpty()).is("Value was null.");
+		assertMap(x1).isEmpty();
+		assertThrown(()->assertMap(x2).isEmpty()).is("Map was not empty.");
 
-		assertThrown(()->assertCollection(null).isNotEmpty()).is("Value was null.");
-		assertThrown(()->assertCollection(x1).isNotEmpty()).is("Collection was empty.");
-		assertCollection(x2).isNotEmpty();
+		assertThrown(()->assertMap(null).isNotEmpty()).is("Value was null.");
+		assertThrown(()->assertMap(x1).isNotEmpty()).is("Map was empty.");
+		assertMap(x2).isNotEmpty();
 
+		assertMap(x2).value("a").asInteger().is(1);
+		assertMap(x2).value("z").asInteger().isNull();
+		assertMap((Map<?,?>)null).value("a").asInteger().isNull();
+
+		assertMap(x2).containsKey("a");
+		assertThrown(()->assertMap(x2).containsKey("x")).stderr().is("Map did not contain expected key.\n\tContents: {a:1,b:2}\n\tExpected key: x");
+		assertThrown(()->assertMap((Map<?,?>)null).containsKey("x")).stderr().is("Value was null.");
+
+		assertMap(x2).doesNotContainKey("x");
+		assertThrown(()->assertMap(x2).doesNotContainKey("a")).is("Map contained unexpected key.\n\tContents: {a:1,b:2}\n\tUnexpected key: a");
+		assertThrown(()->assertMap((Map<?,?>)null).containsKey("x")).is("Value was null.");
 	}
 
 	@Test
 	public void a02_other() throws Exception {
-		assertThrown(()->CollectionAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
-		CollectionAssertion.create(null).stdout().stderr();
+		assertThrown(()->MapAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
+		MapAssertion.create(null).stdout().stderr();
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ObjectAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ObjectAssertion_Test.java
index f33e280..1133481 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ObjectAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ObjectAssertion_Test.java
@@ -16,8 +16,10 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.runners.MethodSorters.*;
 import static java.util.Optional.*;
 
+import java.time.*;
 import java.util.*;
 
+import org.apache.juneau.collections.*;
 import org.apache.juneau.json.*;
 import org.junit.*;
 
@@ -53,30 +55,30 @@ public class ObjectAssertion_Test {
 		assertObject("foo").isType(Comparable.class);
 		assertThrown(()->assertObject(1).isType(String.class)).is("Unexpected class.\n\tExpect=[java.lang.String]\n\tActual=[java.lang.Integer]");
 
-		assertObject("foo").serialized(JsonSerializer.DEFAULT).is("\"foo\"");
-		assertObject(empty()).serialized(JsonSerializer.DEFAULT).is("null");
+		assertObject("foo").asString(JsonSerializer.DEFAULT).is("\"foo\"");
+		assertObject(empty()).asString(JsonSerializer.DEFAULT).is("null");
 
-		assertThrown(()->assertObject(new A1()).json()).contains("Could not call getValue() on property 'foo'");
+		assertThrown(()->assertObject(new A1()).asJson()).contains("Could not call getValue() on property 'foo'");
 
-		assertObject("foo").json().is("'foo'");
-		assertObject(empty()).serialized(JsonSerializer.DEFAULT).is("null");
+		assertObject("foo").asJson().is("'foo'");
+		assertObject(empty()).asString(JsonSerializer.DEFAULT).is("null");
 
-		assertObject(new A2()).jsonSorted().is("{bar:2,foo:1}");
+		assertObject(new A2()).asJsonSorted().is("{bar:2,foo:1}");
 
 		int[] x1 = {1,2}, x2 = {2,1};
-		assertObject(x2).jsonSorted().is("[1,2]");
-		assertThrown(()->assertObject(x2).jsonSorted().is("[2,1]")).stderr().is("Unexpected value.\n\tExpect=[[2,1]]\n\tActual=[[1,2]]");
-		assertObject(empty()).jsonSorted().is("null");
+		assertObject(x2).asJsonSorted().is("[1,2]");
+		assertThrown(()->assertObject(x2).asJsonSorted().is("[2,1]")).stderr().is("Unexpected value.\n\tExpect=[[2,1]]\n\tActual=[[1,2]]");
+		assertObject(empty()).asJsonSorted().is("null");
 
-		assertObject(x1).sameAs(x1);
-		assertThrown(()->assertObject(x1).sameAs(x2)).stderr().is("Unexpected comparison.\n\tExpect=[[2,1]]\n\tActual=[[1,2]]");
-		assertObject(empty()).sameAs(null);
-		assertThrown(()->assertObject(new A1()).sameAs(null)).contains("Could not call getValue() on property 'foo'");
+		assertObject(x1).isSameJsonAs(x1);
+		assertThrown(()->assertObject(x1).isSameJsonAs(x2)).stderr().is("Unexpected comparison.\n\tExpect=[[2,1]]\n\tActual=[[1,2]]");
+		assertObject(empty()).isSameJsonAs(null);
+		assertThrown(()->assertObject(new A1()).isSameJsonAs(null)).contains("Could not call getValue() on property 'foo'");
 
-		assertObject(x1).sameAsSorted(x1);
-		assertObject(x1).sameAsSorted(x2);
-		assertThrown(()->assertObject(x1).sameAs(null)).stderr().is("Unexpected comparison.\n\tExpect=[null]\n\tActual=[[1,2]]");
-		assertObject(empty()).sameAsSorted(null);
+		assertObject(x1).isSameSortedAs(x1);
+		assertObject(x1).isSameSortedAs(x2);
+		assertThrown(()->assertObject(x1).isSameJsonAs(null)).stderr().is("Unexpected comparison.\n\tExpect=[null]\n\tActual=[[1,2]]");
+		assertObject(empty()).isSameSortedAs(null);
 
 		assertObject(x1).doesNotEqual(null);
 		assertObject(empty()).doesNotEqual(x1);
@@ -100,6 +102,12 @@ public class ObjectAssertion_Test {
 
 		Date d1 = new Date(0), d2 = new Date(0);
 		assertObject(d1).is(d2);
+
+		assertObject(123).asString().is("123");
+		assertObject((Object)null).asString().isNull();
+
+		assertObject(123).asString(x -> x.toString()).is("123");
+		assertObject(123).asString(Integer.class, x -> String.valueOf(x.intValue())).is("123");
 	}
 
 	@Test
@@ -107,4 +115,23 @@ public class ObjectAssertion_Test {
 		assertThrown(()->ObjectAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
 		ObjectAssertion.create(null).stdout().stderr();
 	}
+
+	@Test
+	public void a03_conversions() throws Exception {
+		assertObject(new String[]{"foo"}).asArray().item(0).is("foo");
+		assertThrown(()->assertObject("foo").asArray()).contains("Object was not an array");
+
+		assertObject(true).asBoolean().isTrue();
+		assertThrown(()->assertObject("foo").asBoolean()).stderr().contains("Object was not type 'java.lang.Boolean'.  Actual='java.lang.String'");
+
+		assertObject(new byte[]{123}).asByteArray().asJson().is("[123]");
+		assertObject(AList.of(123)).asCollection().asJson().is("[123]");
+		assertObject(123).asComparable().asJson().is("123");
+		assertObject(new Date()).asDate().isType(Date.class);
+		assertObject(123).asInteger().asJson().is("123");
+		assertObject(AList.of(123)).asList().asJson().is("[123]");
+		assertObject(123l).asLong().asJson().is("123");
+		assertObject(AMap.create()).asMap().asJson().is("{}");
+		assertObject(ZonedDateTime.now()).asZonedDateTime().isType(ZonedDateTime.class);
+	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/StringAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/StringAssertion_Test.java
index 877cf63..0ded6b5 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/StringAssertion_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/StringAssertion_Test.java
@@ -50,32 +50,32 @@ public class StringAssertion_Test {
 		assertString("foobar").uc().is("FOOBAR").is("foobar");
 		assertString(empty()).uc().isNull();
 
-		assertString("foo\nbar\nbaz").isEqualLines("foo","bar","baz");
-		assertThrown(()->assertString(empty()).isEqualLines((String[])null)).is("Parameter 'lines' cannot be null.");
-		assertThrown(()->assertString(empty()).isEqualLines((String)null)).is("Text differed at position -1.\n\tExpect=[]\n\tActual=[null]");
-		assertThrown(()->assertString("foo\nbar\nbaz").javaStrings().isEqualLines("foo","bar","bar")).stderr().is("Text differed at position 10.\n\tExpect=[foo\\nbar\\nbar]\n\tActual=[foo\\nbar\\nbaz]");
-
-		assertString("foo\nbar\nbaz").isEqualSortedLines("bar","foo","baz");
-		assertThrown(()->assertString(empty()).isEqualSortedLines((String[])null)).is("Parameter 'lines' cannot be null.");
-		assertString("").isEqualSortedLines((String)null);
-		assertThrown(()->assertString(empty()).isEqualSortedLines()).is("Value was null.");
-		assertThrown(()->assertString("foo\nbar\nbaz").isEqualSortedLines("bar","foo","bar")).stderr().is("Expected text had different values at line 2.\n\tExpect=[bar]\n\tActual=[baz]");
-		assertThrown(()->assertString("foo\nbar\nbaz").isEqualSortedLines("bar","foo")).stderr().is("Expected text had different numbers of lines.\n\tExpect=[2]\n\tActual=[3]");
-		assertThrown(()->assertString(empty()).isEqualSortedLines("foo")).stderr().is("Value was null.");
-		assertThrown(()->assertString("foo").isEqualSortedLines((String)null)).stderr().is("Expected text had different values at line 1.\n\tExpect=[]\n\tActual=[foo]");
-
-		assertString("foo\nbar\nbaz").isEqualLines("foo","bar","baz");
-
-		assertString("foobar").isEqualIc("FOOBAR");
-		assertString(empty()).isEqualIc(null);
-		assertThrown(()->assertString("foobar").isEqualIc("FOOBAZ")).stderr().is("Text differed at position 5.\n\tExpect=[FOOBAZ]\n\tActual=[foobar]");
-		assertThrown(()->assertString(empty()).isEqualIc("FOOBAZ")).stderr().is("Text differed at position 0.\n\tExpect=[FOOBAZ]\n\tActual=[null]");
-		assertThrown(()->assertString("foobar").isEqualIc(null)).stderr().is("Text differed at position 0.\n\tExpect=[null]\n\tActual=[foobar]");
+		assertString("foo\nbar\nbaz").isEqualLinesTo("foo","bar","baz");
+		assertThrown(()->assertString(empty()).isEqualLinesTo((String[])null)).is("Parameter 'lines' cannot be null.");
+		assertThrown(()->assertString(empty()).isEqualLinesTo((String)null)).is("Text differed at position -1.\n\tExpect=[]\n\tActual=[null]");
+		assertThrown(()->assertString("foo\nbar\nbaz").javaStrings().isEqualLinesTo("foo","bar","bar")).stderr().is("Text differed at position 10.\n\tExpect=[foo\\nbar\\nbar]\n\tActual=[foo\\nbar\\nbaz]");
+
+		assertString("foo\nbar\nbaz").isEqualSortedLinesTo("bar","foo","baz");
+		assertThrown(()->assertString(empty()).isEqualSortedLinesTo((String[])null)).is("Parameter 'lines' cannot be null.");
+		assertString("").isEqualSortedLinesTo((String)null);
+		assertThrown(()->assertString(empty()).isEqualSortedLinesTo()).is("Value was null.");
+		assertThrown(()->assertString("foo\nbar\nbaz").isEqualSortedLinesTo("bar","foo","bar")).stderr().is("Expected text had different values at line 2.\n\tExpect=[bar]\n\tActual=[baz]");
+		assertThrown(()->assertString("foo\nbar\nbaz").isEqualSortedLinesTo("bar","foo")).stderr().is("Expected text had different numbers of lines.\n\tExpect=[2]\n\tActual=[3]");
+		assertThrown(()->assertString(empty()).isEqualSortedLinesTo("foo")).stderr().is("Value was null.");
+		assertThrown(()->assertString("foo").isEqualSortedLinesTo((String)null)).stderr().is("Expected text had different values at line 1.\n\tExpect=[]\n\tActual=[foo]");
+
+		assertString("foo\nbar\nbaz").isEqualLinesTo("foo","bar","baz");
+
+		assertString("foobar").isEqualIgnoreCaseTo("FOOBAR");
+		assertString(empty()).isEqualIgnoreCaseTo(null);
+		assertThrown(()->assertString("foobar").isEqualIgnoreCaseTo("FOOBAZ")).stderr().is("Text differed at position 5.\n\tExpect=[FOOBAZ]\n\tActual=[foobar]");
+		assertThrown(()->assertString(empty()).isEqualIgnoreCaseTo("FOOBAZ")).stderr().is("Text differed at position 0.\n\tExpect=[FOOBAZ]\n\tActual=[null]");
+		assertThrown(()->assertString("foobar").isEqualIgnoreCaseTo(null)).stderr().is("Text differed at position 0.\n\tExpect=[null]\n\tActual=[foobar]");
 
 		assertString("foobar").doesNotEqual("foobaz");
 		assertThrown(()->assertString("foobar").doesNotEqual("foobar")).stderr().is("Text equaled unexpected.\n\tText=[foobar]");
 
-		assertThrown(()->assertString("foobar").isEqual("foobaz")).stderr().is("Text differed at position 5.\n\tExpect=[foobaz]\n\tActual=[foobar]");
+		assertThrown(()->assertString("foobar").isEqualTo("foobaz")).stderr().is("Text differed at position 5.\n\tExpect=[foobaz]\n\tActual=[foobar]");
 
 		assertString("foobar").isNot("foobaz");
 		assertThrown(()->assertString("foobar").isNot("foobar")).is("Text equaled unexpected.\n\tText=[foobar]");
@@ -125,6 +125,12 @@ public class StringAssertion_Test {
 		assertThrown(()->assertString("foo").doesNotMatch("fo+")).is("Text matched unexpected pattern.\n\tPattern=[fo+]\n\tText=[foo]");
 		assertString(empty()).doesNotMatch("fo+");
 		assertThrown(()->assertString("").doesNotMatch((String)null)).is("Parameter 'regex' cannot be null.");
+
+		assertString("foo").startsWith("fo");
+		assertThrown(()->assertString("foo").startsWith("x")).stderr().is("Text did not start with expected string.\n\tString=[x]\n\tText=[foo]");
+
+		assertString("foo").endsWith("oo");
+		assertThrown(()->assertString("foo").endsWith("x")).stderr().is("Text did not end with expected string.\n\tString=[x]\n\tText=[foo]");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ZonedDateTimeAssertion_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ZonedDateTimeAssertion_Test.java
new file mode 100644
index 0000000..ccad093
--- /dev/null
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/assertions/ZonedDateTimeAssertion_Test.java
@@ -0,0 +1,82 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.assertions;
+
+import static org.apache.juneau.assertions.Assertions.*;
+import static org.junit.runners.MethodSorters.*;
+import static java.util.Optional.*;
+
+import java.time.*;
+import java.time.temporal.*;
+
+import org.junit.*;
+
+@FixMethodOrder(NAME_ASCENDING)
+public class ZonedDateTimeAssertion_Test {
+
+	@Test
+	public void a01_basic() throws Exception {
+		ZonedDateTime x1 = ZonedDateTime.parse("1950-01-01T12:34:56Z"), x2 = ZonedDateTime.parse("2050-01-01T12:34:56Z");
+		ZonedDateTime now = ZonedDateTime.now();
+
+		assertThrown(()->assertZonedDateTime((ZonedDateTime)null).exists()).is("Value was null.");
+		assertZonedDateTime(x1).exists();
+		assertThrown(()->assertZonedDateTime(empty()).exists()).is("Value was null.");
+		assertZonedDateTime(x1).exists();
+
+		assertZonedDateTime(empty()).doesNotExist();
+		assertThrown(()->assertZonedDateTime(x1).doesNotExist()).is("Value was not null.");
+
+		assertZonedDateTime(empty()).isEqual(null);
+		assertZonedDateTime(x1).isEqual(x1);
+		assertZonedDateTime(of(x1)).isEqual(x1);
+		assertZonedDateTime(x1).isEqual(x1, ChronoUnit.DAYS);
+		assertThrown(()->assertZonedDateTime(x2).isEqual(x1, ChronoUnit.DAYS)).contains("Unexpected value.");
+
+		assertZonedDateTime(empty()).isEqual(null);
+		assertZonedDateTime(x1).isEqual(x1);
+		assertZonedDateTime(x1).isEqual(x1, ChronoUnit.DAYS);
+		assertThrown(()->assertZonedDateTime(x2).isEqual(x1, ChronoUnit.DAYS)).contains("Unexpected value.");
+
+		assertThrown(()->assertZonedDateTime(empty()).isBefore(x1)).is("Value was null.");
+		assertThrown(()->assertZonedDateTime(x1).isBefore(null)).is("Parameter 'value' cannot be null.");
+		assertZonedDateTime(x1).isBefore(x2);
+		assertThrown(()->assertZonedDateTime(x2).isBefore(x1)).contains("Value was not before expected.");
+
+		assertThrown(()->assertZonedDateTime(empty()).isAfter(x1)).is("Value was null.");
+		assertThrown(()->assertZonedDateTime(x1).isAfter(null)).is("Parameter 'value' cannot be null.");
+		assertZonedDateTime(x2).isAfter(x1);
+		assertThrown(()->assertZonedDateTime(x1).isAfter(x2)).contains("Value was not after expected.");
+
+		assertThrown(()->assertZonedDateTime(empty()).isBeforeNow()).is("Value was null.");
+		assertZonedDateTime(x1).isBeforeNow();
+		assertThrown(()->assertZonedDateTime(x2).isBeforeNow()).contains("Value was not before expected.");
+
+		assertThrown(()->assertZonedDateTime(empty()).isAfterNow()).is("Value was null.");
+		assertZonedDateTime(x2).isAfterNow();
+		assertThrown(()->assertZonedDateTime(x1).isAfterNow()).contains("Value was not after expected.");
+
+		assertThrown(()->assertZonedDateTime(empty()).isBetween(x1,x2)).is("Value was null.");
+		assertThrown(()->assertZonedDateTime(now).isBetween(null,x2)).is("Parameter 'lower' cannot be null.");
+		assertThrown(()->assertZonedDateTime(now).isBetween(x1,null)).is("Parameter 'upper' cannot be null.");
+		assertZonedDateTime(now).isBetween(x1, x2);
+		assertThrown(()->assertZonedDateTime(x1).isBetween(now,x2)).contains("Value was not after expected.");
+		assertThrown(()->assertZonedDateTime(x2).isBetween(x1,now)).contains("Value was not before expected.");
+	}
+
+	@Test
+	public void a02_other() throws Exception {
+		assertThrown(()->ZonedDateTimeAssertion.create(null).msg("Foo {0}", 1).exists()).is("Foo 1");
+		ZonedDateTimeAssertion.create(null).stdout().stderr();
+	}
+}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
index c88a2e4..dcc1887 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigBuilderTest.java
@@ -53,10 +53,10 @@ public class ConfigBuilderTest {
 		assertFalse(f.exists());
 
 		cf.commit();
-		assertObject(cf.toMap()).json().is("{'':{},Test:{A:'a'}}");
+		assertObject(cf.toMap()).asJson().is("{'':{},Test:{A:'a'}}");
 
 		String NL = System.getProperty("line.separator");
 		cf = cf.load("[Test]"+NL+"A = b"+NL, true);
-		assertObject(cf.toMap()).json().is("{'':{},Test:{A:'b'}}");
+		assertObject(cf.toMap()).asJson().is("{'':{},Test:{A:'b'}}");
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
index ee58e96..0674fbd 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
@@ -95,14 +95,14 @@ public class ConfigInterfaceTest {
 	public void testInt3dArray() throws Exception {
 		proxy.setInt3dArray(new int[][][]{{{1,2},null},null});
 		assertEquals("[[[1,2],null],null]", cf.get("A/int3dArray"));
-		assertObject(proxy.getInt3dArray()).json().is("[[[1,2],null],null]");
+		assertObject(proxy.getInt3dArray()).asJson().is("[[[1,2],null],null]");
 		assertObject(proxy.getInt3dArray()).isType(int[][][].class);
 	}
 
 	@Test
 	public void testInteger3dArray() throws Exception {
 		proxy.setInteger3dArray(new Integer[][][]{{{1,null},null},null});
-		assertObject(proxy.getInteger3dArray()).json().is("[[[1,null],null],null]");
+		assertObject(proxy.getInteger3dArray()).asJson().is("[[[1,null],null],null]");
 		assertEquals("[[[1,null],null],null]", cf.get("A/integer3dArray"));
 		assertObject(proxy.getInteger3dArray()[0][0][0]).isType(Integer.class);
 	}
@@ -110,14 +110,14 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testString3dArray() throws Exception {
 		proxy.setString3dArray(new String[][][]{{{"foo",null},null},null});
-		assertObject(proxy.getString3dArray()).json().is("[[['foo',null],null],null]");
+		assertObject(proxy.getString3dArray()).asJson().is("[[['foo',null],null],null]");
 		assertEquals("[[['foo',null],null],null]", cf.get("A/string3dArray"));
 	}
 
 	@Test
 	public void testIntegerList() throws Exception {
 		proxy.setIntegerList(AList.of(1,null));
-		assertObject(proxy.getIntegerList()).json().is("[1,null]");
+		assertObject(proxy.getIntegerList()).asJson().is("[1,null]");
 		assertEquals("[1,null]", cf.get("A/integerList"));
 		assertObject(proxy.getIntegerList().get(0)).isType(Integer.class);
 	}
@@ -125,7 +125,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testInteger3dList() throws Exception {
 		proxy.setInteger3dList(AList.of(AList.of(AList.of(1,null),null),null));
-		assertObject(proxy.getInteger3dList()).json().is("[[[1,null],null],null]");
+		assertObject(proxy.getInteger3dList()).asJson().is("[[[1,null],null],null]");
 		assertEquals("[[[1,null],null],null]", cf.get("A/integer3dList"));
 		assertObject(proxy.getInteger3dList().get(0).get(0).get(0)).isType(Integer.class);
 	}
@@ -133,7 +133,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testInteger1d3dList() throws Exception {
 		proxy.setInteger1d3dList(AList.of(new Integer[][][]{{{1,null},null},null},null));
-		assertObject(proxy.getInteger1d3dList()).json().is("[[[[1,null],null],null],null]");
+		assertObject(proxy.getInteger1d3dList()).asJson().is("[[[[1,null],null],null],null]");
 		assertEquals("[[[[1,null],null],null],null]", cf.get("A/integer1d3dList"));
 		assertObject(proxy.getInteger1d3dList().get(0)[0][0][0]).isType(Integer.class);
 	}
@@ -141,7 +141,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testInt1d3dList() throws Exception {
 		proxy.setInt1d3dList(AList.of(new int[][][]{{{1,2},null},null},null));
-		assertObject(proxy.getInt1d3dList()).json().is("[[[[1,2],null],null],null]");
+		assertObject(proxy.getInt1d3dList()).asJson().is("[[[[1,2],null],null],null]");
 		assertEquals("[[[[1,2],null],null],null]", cf.get("A/int1d3dList"));
 		assertObject(proxy.getInt1d3dList().get(0)).isType(int[][][].class);
 	}
@@ -149,7 +149,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testStringList() throws Exception {
 		proxy.setStringList(Arrays.asList("foo","bar",null));
-		assertObject(proxy.getStringList()).json().is("['foo','bar',null]");
+		assertObject(proxy.getStringList()).asJson().is("['foo','bar',null]");
 		assertEquals("['foo','bar',null]", cf.get("A/stringList"));
 	}
 
@@ -158,7 +158,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBean() throws Exception {
 		proxy.setBean(ABean.get());
-		assertObject(proxy.getBean()).json().is("{a:1,b:'foo'}");
+		assertObject(proxy.getBean()).asJson().is("{a:1,b:'foo'}");
 		assertEquals("{a:1,b:'foo'}", cf.get("A/bean"));
 		assertObject(proxy.getBean()).isType(ABean.class);
 	}
@@ -166,7 +166,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBean3dArray() throws Exception {
 		proxy.setBean3dArray(new ABean[][][]{{{ABean.get(),null},null},null});
-		assertObject(proxy.getBean3dArray()).json().is("[[[{a:1,b:'foo'},null],null],null]");
+		assertObject(proxy.getBean3dArray()).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 		assertEquals("[[[{a:1,b:'foo'},null],null],null]", cf.get("A/bean3dArray"));
 		assertObject(proxy.getBean3dArray()[0][0][0]).isType(ABean.class);
 	}
@@ -174,7 +174,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBeanList() throws Exception {
 		proxy.setBeanList(Arrays.asList(ABean.get()));
-		assertObject(proxy.getBeanList()).json().is("[{a:1,b:'foo'}]");
+		assertObject(proxy.getBeanList()).asJson().is("[{a:1,b:'foo'}]");
 		assertEquals("[{a:1,b:'foo'}]", cf.get("A/beanList"));
 		assertObject(proxy.getBeanList().get(0)).isType(ABean.class);
 	}
@@ -182,7 +182,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBean1d3dList() throws Exception {
 		proxy.setBean1d3dList(AList.of(new ABean[][][]{{{ABean.get(),null},null},null},null));
-		assertObject(proxy.getBean1d3dList()).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+		assertObject(proxy.getBean1d3dList()).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 		assertEquals("[[[[{a:1,b:'foo'},null],null],null],null]", cf.get("A/bean1d3dList"));
 		assertObject(proxy.getBean1d3dList().get(0)[0][0][0]).isType(ABean.class);
 	}
@@ -190,7 +190,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBeanMap() throws Exception {
 		proxy.setBeanMap(AMap.of("foo",ABean.get()));
-		assertObject(proxy.getBeanMap()).json().is("{foo:{a:1,b:'foo'}}");
+		assertObject(proxy.getBeanMap()).asJson().is("{foo:{a:1,b:'foo'}}");
 		assertEquals("{foo:{a:1,b:'foo'}}", cf.get("A/beanMap"));
 		assertObject(proxy.getBeanMap().get("foo")).isType(ABean.class);
 	}
@@ -198,7 +198,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBeanListMap() throws Exception {
 		proxy.setBeanListMap(AMap.of("foo",Arrays.asList(ABean.get())));
-		assertObject(proxy.getBeanListMap()).json().is("{foo:[{a:1,b:'foo'}]}");
+		assertObject(proxy.getBeanListMap()).asJson().is("{foo:[{a:1,b:'foo'}]}");
 		assertEquals("{foo:[{a:1,b:'foo'}]}", cf.get("A/beanListMap"));
 		assertObject(proxy.getBeanListMap().get("foo").get(0)).isType(ABean.class);
 	}
@@ -206,7 +206,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBean1d3dListMap() throws Exception {
 		proxy.setBean1d3dListMap(AMap.of("foo",AList.of(new ABean[][][]{{{ABean.get(),null},null},null},null)));
-		assertObject(proxy.getBean1d3dListMap()).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+		assertObject(proxy.getBean1d3dListMap()).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 		assertEquals("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}", cf.get("A/bean1d3dListMap"));
 		assertObject(proxy.getBean1d3dListMap().get("foo").get(0)[0][0][0]).isType(ABean.class);
 	}
@@ -214,7 +214,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testBeanListMapIntegerKeys() throws Exception {
 		proxy.setBeanListMapIntegerKeys(AMap.of(1,Arrays.asList(ABean.get())));
-		assertObject(proxy.getBeanListMapIntegerKeys()).json().is("{'1':[{a:1,b:'foo'}]}");
+		assertObject(proxy.getBeanListMapIntegerKeys()).asJson().is("{'1':[{a:1,b:'foo'}]}");
 		assertEquals("{'1':[{a:1,b:'foo'}]}", cf.get("A/beanListMapIntegerKeys"));
 		assertObject(proxy.getBeanListMapIntegerKeys().get(1).get(0)).isType(ABean.class);
 	}
@@ -224,7 +224,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBean() throws Exception {
 		proxy.setTypedBean(TypedBeanImpl.get());
-		assertObject(proxy.getTypedBean()).json().is("{a:1,b:'foo'}");
+		assertObject(proxy.getTypedBean()).asJson().is("{a:1,b:'foo'}");
 		assertEquals("{_type:'TypedBeanImpl',a:1,b:'foo'}", cf.get("A/typedBean"));
 		assertObject(proxy.getTypedBean()).isType(TypedBeanImpl.class);
 	}
@@ -232,7 +232,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBean3dArray() throws Exception {
 		proxy.setTypedBean3dArray(new TypedBean[][][]{{{TypedBeanImpl.get(),null},null},null});
-		assertObject(proxy.getTypedBean3dArray()).json().is("[[[{a:1,b:'foo'},null],null],null]");
+		assertObject(proxy.getTypedBean3dArray()).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 		assertEquals("[[[{_type:'TypedBeanImpl',a:1,b:'foo'},null],null],null]", cf.get("A/typedBean3dArray"));
 		assertObject(proxy.getTypedBean3dArray()[0][0][0]).isType(TypedBeanImpl.class);
 	}
@@ -240,7 +240,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBeanList() throws Exception {
 		proxy.setTypedBeanList(Arrays.asList((TypedBean)TypedBeanImpl.get()));
-		assertObject(proxy.getTypedBeanList()).json().is("[{a:1,b:'foo'}]");
+		assertObject(proxy.getTypedBeanList()).asJson().is("[{a:1,b:'foo'}]");
 		assertEquals("[{_type:'TypedBeanImpl',a:1,b:'foo'}]", cf.get("A/typedBeanList"));
 		assertObject(proxy.getTypedBeanList().get(0)).isType(TypedBeanImpl.class);
 	}
@@ -248,7 +248,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBean1d3dList() throws Exception {
 		proxy.setTypedBean1d3dList(AList.of(new TypedBean[][][]{{{TypedBeanImpl.get(),null},null},null},null));
-		assertObject(proxy.getTypedBean1d3dList()).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+		assertObject(proxy.getTypedBean1d3dList()).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 		assertEquals("[[[[{_type:'TypedBeanImpl',a:1,b:'foo'},null],null],null],null]", cf.get("A/typedBean1d3dList"));
 		assertObject(proxy.getTypedBean1d3dList().get(0)[0][0][0]).isType(TypedBeanImpl.class);
 	}
@@ -256,7 +256,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBeanMap() throws Exception {
 		proxy.setTypedBeanMap(AMap.of("foo",TypedBeanImpl.get()));
-		assertObject(proxy.getTypedBeanMap()).json().is("{foo:{a:1,b:'foo'}}");
+		assertObject(proxy.getTypedBeanMap()).asJson().is("{foo:{a:1,b:'foo'}}");
 		assertEquals("{foo:{_type:'TypedBeanImpl',a:1,b:'foo'}}", cf.get("A/typedBeanMap"));
 		assertObject(proxy.getTypedBeanMap().get("foo")).isType(TypedBeanImpl.class);
 	}
@@ -264,7 +264,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBeanListMap() throws Exception {
 		proxy.setTypedBeanListMap(AMap.of("foo",Arrays.asList((TypedBean)TypedBeanImpl.get())));
-		assertObject(proxy.getTypedBeanListMap()).json().is("{foo:[{a:1,b:'foo'}]}");
+		assertObject(proxy.getTypedBeanListMap()).asJson().is("{foo:[{a:1,b:'foo'}]}");
 		assertEquals("{foo:[{_type:'TypedBeanImpl',a:1,b:'foo'}]}", cf.get("A/typedBeanListMap"));
 		assertObject(proxy.getTypedBeanListMap().get("foo").get(0)).isType(TypedBeanImpl.class);
 	}
@@ -272,7 +272,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBean1d3dListMap() throws Exception {
 		proxy.setTypedBean1d3dListMap(AMap.of("foo",AList.of(new TypedBean[][][]{{{TypedBeanImpl.get(),null},null},null},null)));
-		assertObject(proxy.getTypedBean1d3dListMap()).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+		assertObject(proxy.getTypedBean1d3dListMap()).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 		assertEquals("{foo:[[[[{_type:'TypedBeanImpl',a:1,b:'foo'},null],null],null],null]}", cf.get("A/typedBean1d3dListMap"));
 		assertObject(proxy.getTypedBean1d3dListMap().get("foo").get(0)[0][0][0]).isType(TypedBeanImpl.class);
 	}
@@ -280,7 +280,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testTypedBeanListMapIntegerKeys() throws Exception {
 		proxy.setTypedBeanListMapIntegerKeys(AMap.of(1,Arrays.asList((TypedBean)TypedBeanImpl.get())));
-		assertObject(proxy.getTypedBeanListMapIntegerKeys()).json().is("{'1':[{a:1,b:'foo'}]}");
+		assertObject(proxy.getTypedBeanListMapIntegerKeys()).asJson().is("{'1':[{a:1,b:'foo'}]}");
 		assertEquals("{'1':[{_type:'TypedBeanImpl',a:1,b:'foo'}]}", cf.get("A/typedBeanListMapIntegerKeys"));
 		assertObject(proxy.getTypedBeanListMapIntegerKeys().get(1).get(0)).isType(TypedBeanImpl.class);
 	}
@@ -290,7 +290,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testSwappedPojo() throws Exception {
 		proxy.setSwappedPojo(new SwappedPojo());
-		assertObject(proxy.getSwappedPojo()).json().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
+		assertObject(proxy.getSwappedPojo()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
 		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/swappedPojo"));
 		assertObject(proxy.getSwappedPojo()).isType(SwappedPojo.class);
 	}
@@ -298,7 +298,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testSwappedPojo3dArray() throws Exception {
 		proxy.setSwappedPojo3dArray(new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null});
-		assertObject(proxy.getSwappedPojo3dArray()).json().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
+		assertObject(proxy.getSwappedPojo3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
 		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/swappedPojo3dArray"));
 		assertObject(proxy.getSwappedPojo3dArray()[0][0][0]).isType(SwappedPojo.class);
 	}
@@ -306,7 +306,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testSwappedPojoMap() throws Exception {
 		proxy.setSwappedPojoMap(AMap.of(new SwappedPojo(), new SwappedPojo()));
-		assertObject(proxy.getSwappedPojoMap()).json().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
+		assertObject(proxy.getSwappedPojoMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/swappedPojoMap"));
 		assertObject(proxy.getSwappedPojoMap().keySet().iterator().next()).isType(SwappedPojo.class);
 		assertObject(proxy.getSwappedPojoMap().values().iterator().next()).isType(SwappedPojo.class);
@@ -315,7 +315,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testSwappedPojo3dMap() throws Exception {
 		proxy.setSwappedPojo3dMap(AMap.of(new SwappedPojo(), new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null}));
-		assertObject(proxy.getSwappedPojo3dMap()).json().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
+		assertObject(proxy.getSwappedPojo3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/swappedPojo3dMap"));
 		assertObject(proxy.getSwappedPojo3dMap().keySet().iterator().next()).isType(SwappedPojo.class);
 		assertObject(proxy.getSwappedPojo3dMap().values().iterator().next()[0][0][0]).isType(SwappedPojo.class);
@@ -326,7 +326,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testImplicitSwappedPojo() throws Exception {
 		proxy.setImplicitSwappedPojo(new ImplicitSwappedPojo());
-		assertObject(proxy.getImplicitSwappedPojo()).json().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
+		assertObject(proxy.getImplicitSwappedPojo()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
 		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/implicitSwappedPojo"));
 		assertObject(proxy.getImplicitSwappedPojo()).isType(ImplicitSwappedPojo.class);
 	}
@@ -334,7 +334,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testImplicitSwappedPojo3dArray() throws Exception {
 		proxy.setImplicitSwappedPojo3dArray(new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null});
-		assertObject(proxy.getImplicitSwappedPojo3dArray()).json().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
+		assertObject(proxy.getImplicitSwappedPojo3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
 		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/implicitSwappedPojo3dArray"));
 		assertObject(proxy.getImplicitSwappedPojo3dArray()[0][0][0]).isType(ImplicitSwappedPojo.class);
 	}
@@ -342,7 +342,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testImplicitSwappedPojoMap() throws Exception {
 		proxy.setImplicitSwappedPojoMap(AMap.of(new ImplicitSwappedPojo(), new ImplicitSwappedPojo()));
-		assertObject(proxy.getImplicitSwappedPojoMap()).json().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
+		assertObject(proxy.getImplicitSwappedPojoMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/implicitSwappedPojoMap"));
 		assertObject(proxy.getImplicitSwappedPojoMap().keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
 		assertObject(proxy.getImplicitSwappedPojoMap().values().iterator().next()).isType(ImplicitSwappedPojo.class);
@@ -351,7 +351,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testImplicitSwappedPojo3dMap() throws Exception {
 		proxy.setImplicitSwappedPojo3dMap(AMap.of(new ImplicitSwappedPojo(), new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null}));
-		assertObject(proxy.getImplicitSwappedPojo3dMap()).json().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
+		assertObject(proxy.getImplicitSwappedPojo3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/implicitSwappedPojo3dMap"));
 		assertObject(proxy.getImplicitSwappedPojo3dMap().keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
 		assertObject(proxy.getImplicitSwappedPojo3dMap().values().iterator().next()[0][0][0]).isType(ImplicitSwappedPojo.class);
@@ -362,7 +362,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum() throws Exception {
 		proxy.setEnum(TestEnum.TWO);
-		assertObject(proxy.getEnum()).json().is("'TWO'");
+		assertObject(proxy.getEnum()).asJson().is("'TWO'");
 		assertEquals("TWO", cf.get("A/enum"));
 		assertObject(proxy.getEnum()).isType(TestEnum.class);
 	}
@@ -370,7 +370,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum3d() throws Exception {
 		proxy.setEnum3d(new TestEnum[][][]{{{TestEnum.TWO,null},null},null});
-		assertObject(proxy.getEnum3d()).json().is("[[['TWO',null],null],null]");
+		assertObject(proxy.getEnum3d()).asJson().is("[[['TWO',null],null],null]");
 		assertEquals("[[['TWO',null],null],null]", cf.get("A/enum3d"));
 		assertObject(proxy.getEnum3d()[0][0][0]).isType(TestEnum.class);
 	}
@@ -378,7 +378,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnumList() throws Exception {
 		proxy.setEnumList(AList.of(TestEnum.TWO,null));
-		assertObject(proxy.getEnumList()).json().is("['TWO',null]");
+		assertObject(proxy.getEnumList()).asJson().is("['TWO',null]");
 		assertEquals("['TWO',null]", cf.get("A/enumList"));
 		assertObject(proxy.getEnumList().get(0)).isType(TestEnum.class);
 	}
@@ -386,7 +386,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum3dList() throws Exception {
 		proxy.setEnum3dList(AList.of(AList.of(AList.of(TestEnum.TWO,null),null),null));
-		assertObject(proxy.getEnum3dList()).json().is("[[['TWO',null],null],null]");
+		assertObject(proxy.getEnum3dList()).asJson().is("[[['TWO',null],null],null]");
 		assertEquals("[[['TWO',null],null],null]", cf.get("A/enum3dList"));
 		assertObject(proxy.getEnum3dList().get(0).get(0).get(0)).isType(TestEnum.class);
 	}
@@ -394,7 +394,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum1d3dList() throws Exception {
 		proxy.setEnum1d3dList(AList.of(new TestEnum[][][]{{{TestEnum.TWO,null},null},null},null));
-		assertObject(proxy.getEnum1d3dList()).json().is("[[[['TWO',null],null],null],null]");
+		assertObject(proxy.getEnum1d3dList()).asJson().is("[[[['TWO',null],null],null],null]");
 		assertEquals("[[[['TWO',null],null],null],null]", cf.get("A/enum1d3dList"));
 		assertObject(proxy.getEnum1d3dList().get(0)[0][0][0]).isType(TestEnum.class);
 	}
@@ -402,7 +402,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnumMap() throws Exception {
 		proxy.setEnumMap(AMap.of(TestEnum.ONE,TestEnum.TWO));
-		assertObject(proxy.getEnumMap()).json().is("{ONE:'TWO'}");
+		assertObject(proxy.getEnumMap()).asJson().is("{ONE:'TWO'}");
 		assertEquals("{ONE:'TWO'}", cf.get("A/enumMap"));
 		assertObject(proxy.getEnumMap().keySet().iterator().next()).isType(TestEnum.class);
 		assertObject(proxy.getEnumMap().values().iterator().next()).isType(TestEnum.class);
@@ -411,7 +411,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum3dArrayMap() throws Exception {
 		proxy.setEnum3dArrayMap(AMap.of(TestEnum.ONE,new TestEnum[][][]{{{TestEnum.TWO,null},null},null}));
-		assertObject(proxy.getEnum3dArrayMap()).json().is("{ONE:[[['TWO',null],null],null]}");
+		assertObject(proxy.getEnum3dArrayMap()).asJson().is("{ONE:[[['TWO',null],null],null]}");
 		assertEquals("{ONE:[[['TWO',null],null],null]}", cf.get("A/enum3dArrayMap"));
 		assertObject(proxy.getEnum3dArrayMap().keySet().iterator().next()).isType(TestEnum.class);
 		assertObject(proxy.getEnum3dArrayMap().values().iterator().next()[0][0][0]).isType(TestEnum.class);
@@ -420,7 +420,7 @@ public class ConfigInterfaceTest {
 	@Test
 	public void testEnum1d3dListMap() throws Exception {
 		proxy.setEnum1d3dListMap(AMap.of(TestEnum.ONE,AList.of(new TestEnum[][][]{{{TestEnum.TWO,null},null},null},null)));
-		assertObject(proxy.getEnum1d3dListMap()).json().is("{ONE:[[[['TWO',null],null],null],null]}");
+		assertObject(proxy.getEnum1d3dListMap()).asJson().is("{ONE:[[[['TWO',null],null],null],null]}");
 		assertEquals("{ONE:[[[['TWO',null],null],null],null]}", cf.get("A/enum1d3dListMap"));
 		assertObject(proxy.getEnum1d3dListMap().keySet().iterator().next()).isType(TestEnum.class);
 		assertObject(proxy.getEnum1d3dListMap().values().iterator().next().get(0)[0][0][0]).isType(TestEnum.class);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
index 4a75b9e..7f9cf05 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigMapListenerTest.java
@@ -42,7 +42,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(foo = baz)']");
+				assertObject(events).asJson().is("['SET(foo = baz)']");
 			}
 		};
 
@@ -69,7 +69,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(S1/foo = baz)']");
+				assertObject(events).asJson().is("['SET(S1/foo = baz)']");
 			}
 		};
 
@@ -98,7 +98,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(k = vb)','SET(S1/k1 = v1b)']");
+				assertObject(events).asJson().is("['SET(k = vb)','SET(S1/k1 = v1b)']");
 			}
 		};
 
@@ -124,7 +124,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(k^* = kb # C)','SET(S1/k1^* = k1b # C1)']");
+				assertObject(events).asJson().is("['SET(k^* = kb # C)','SET(S1/k1^* = k1b # C1)']");
 			}
 		};
 
@@ -156,7 +156,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(k^* = kb # Cb)','SET(S1/k1^* = k1b # Cb1)']");
+				assertObject(events).asJson().is("['SET(k^* = kb # Cb)','SET(S1/k1^* = k1b # Cb1)']");
 			}
 		};
 
@@ -189,7 +189,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)']");
+				assertObject(events).asJson().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)']");
 			}
 		};
 
@@ -221,7 +221,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)']");
+				assertObject(events).asJson().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)']");
 			}
 		};
 
@@ -251,7 +251,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(S3/k3 = v3)']");
+				assertObject(events).asJson().is("['SET(S3/k3 = v3)']");
 			}
 		};
 
@@ -286,7 +286,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(S3/k3 = v3)']");
+				assertObject(events).asJson().is("['SET(S3/k3 = v3)']");
 			}
 		};
 
@@ -331,7 +331,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)','REMOVE_ENTRY(S2/k2)']");
+				assertObject(events).asJson().is("['REMOVE_ENTRY(k)','REMOVE_ENTRY(S1/k1)','REMOVE_ENTRY(S2/k2)']");
 			}
 		};
 
@@ -362,7 +362,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is("['SET(k = v # cv)','SET(S1/k1 = v1 # cv1)','SET(S2/k2 = v2 # cv2)']");
+				assertObject(events).asJson().is("['SET(k = v # cv)','SET(S1/k1 = v1 # cv1)','SET(S2/k2 = v2 # cv2)']");
 			}
 		};
 
@@ -408,7 +408,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is(eventList.poll());
+				assertObject(events).asJson().is(eventList.poll());
 			}
 		};
 
@@ -446,7 +446,7 @@ public class ConfigMapListenerTest {
 		LatchedListener l = new LatchedListener(latch) {
 			@Override
 			public void check(ConfigEvents events) throws Exception {
-				assertObject(events).json().is(eventList.poll());
+				assertObject(events).asJson().is(eventList.poll());
 			}
 		};
 
@@ -493,7 +493,7 @@ public class ConfigMapListenerTest {
 			LatchedListener l = new LatchedListener(latch) {
 				@Override
 				public void check(ConfigEvents events) throws Exception {
-					assertObject(events).json().is(eventList.poll());
+					assertObject(events).asJson().is(eventList.poll());
 				}
 			};
 
@@ -539,7 +539,7 @@ public class ConfigMapListenerTest {
 			LatchedListener l = new LatchedListener(latch) {
 				@Override
 				public void check(ConfigEvents events) throws Exception {
-					assertObject(events).json().is(eventList.poll());
+					assertObject(events).asJson().is(eventList.poll());
 				}
 			};
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
index 96f6d4f..06b9205 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -249,13 +249,13 @@ public class ConfigTest {
 	@Test
 	public void getStringArray1() throws Exception {
 		Config c = init("a1=1,2", "a2= 2 , 3 ", "[S]", "b1=1", "b2=");
-		assertObject(c.getStringArray("a1")).json().is("['1','2']");
-		assertObject(c.getStringArray("a2")).json().is("['2','3']");
-		assertObject(c.getStringArray("a3")).json().is("[]");
-		assertObject(c.getStringArray("S/b1")).json().is("['1']");
-		assertObject(c.getStringArray("S/b2")).json().is("[]");
-		assertObject(c.getStringArray("S/b3")).json().is("[]");
-		assertObject(c.getStringArray("T/c1")).json().is("[]");
+		assertObject(c.getStringArray("a1")).asJson().is("['1','2']");
+		assertObject(c.getStringArray("a2")).asJson().is("['2','3']");
+		assertObject(c.getStringArray("a3")).asJson().is("[]");
+		assertObject(c.getStringArray("S/b1")).asJson().is("['1']");
+		assertObject(c.getStringArray("S/b2")).asJson().is("[]");
+		assertObject(c.getStringArray("S/b3")).asJson().is("[]");
+		assertObject(c.getStringArray("T/c1")).asJson().is("[]");
 	}
 
 	//====================================================================================================
@@ -264,13 +264,13 @@ public class ConfigTest {
 	@Test
 	public void getStringArray2() throws Exception {
 		Config c = init("a1=1,2", "a2= 2 , 3 ", "[S]", "b1=1", "b2=");
-		assertObject(c.getStringArray("a1", new String[] {"foo"})).json().is("['1','2']");
-		assertObject(c.getStringArray("a2", new String[] {"foo"})).json().is("['2','3']");
-		assertObject(c.getStringArray("a3", new String[] {"foo"})).json().is("['foo']");
-		assertObject(c.getStringArray("S/b1", new String[] {"foo"})).json().is("['1']");
-		assertObject(c.getStringArray("S/b2", new String[] {"foo"})).json().is("['foo']");
-		assertObject(c.getStringArray("S/b3", new String[] {"foo"})).json().is("['foo']");
-		assertObject(c.getStringArray("T/c1", new String[] {"foo"})).json().is("['foo']");
+		assertObject(c.getStringArray("a1", new String[] {"foo"})).asJson().is("['1','2']");
+		assertObject(c.getStringArray("a2", new String[] {"foo"})).asJson().is("['2','3']");
+		assertObject(c.getStringArray("a3", new String[] {"foo"})).asJson().is("['foo']");
+		assertObject(c.getStringArray("S/b1", new String[] {"foo"})).asJson().is("['1']");
+		assertObject(c.getStringArray("S/b2", new String[] {"foo"})).asJson().is("['foo']");
+		assertObject(c.getStringArray("S/b3", new String[] {"foo"})).asJson().is("['foo']");
+		assertObject(c.getStringArray("T/c1", new String[] {"foo"})).asJson().is("['foo']");
 	}
 
 	//====================================================================================================
@@ -425,9 +425,9 @@ public class ConfigTest {
 	public void getBytes1() throws Exception {
 		Config c = init("a1=Zm9v", "a2=Zm", "\t9v", "a3=");
 
-		assertObject(c.getBytes("a1")).json().is("[102,111,111]");
-		assertObject(c.getBytes("a2")).json().is("[102,111,111]");
-		assertObject(c.getBytes("a3")).json().is("[]");
+		assertObject(c.getBytes("a1")).asJson().is("[102,111,111]");
+		assertObject(c.getBytes("a2")).asJson().is("[102,111,111]");
+		assertObject(c.getBytes("a3")).asJson().is("[]");
 		assertNull(null, c.getBytes("a4"));
 	}
 
@@ -438,10 +438,10 @@ public class ConfigTest {
 	public void getBytes2() throws Exception {
 		Config c = init("a1=Zm9v", "a2=Zm", "\t9v", "a3=");
 
-		assertObject(c.getBytes("a1", new byte[] {1})).json().is("[102,111,111]");
-		assertObject(c.getBytes("a2", new byte[] {1})).json().is("[102,111,111]");
-		assertObject(c.getBytes("a3", new byte[] {1})).json().is("[1]");
-		assertObject(c.getBytes("a4", new byte[] {1})).json().is("[1]");
+		assertObject(c.getBytes("a1", new byte[] {1})).asJson().is("[102,111,111]");
+		assertObject(c.getBytes("a2", new byte[] {1})).asJson().is("[102,111,111]");
+		assertObject(c.getBytes("a3", new byte[] {1})).asJson().is("[1]");
+		assertObject(c.getBytes("a4", new byte[] {1})).asJson().is("[1]");
 	}
 
 	//====================================================================================================
@@ -459,29 +459,29 @@ public class ConfigTest {
 			);
 
 		Map<String,Integer> a1 = c.getObject("a1", Map.class, String.class, Integer.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		List<Map<String,Integer>> a2a = c.getObject("a2", List.class, Map.class, String.class, Integer.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(a2a.get(0).keySet().iterator().next()).isType(String.class);
 		assertObject(a2a.get(0).values().iterator().next()).isType(Integer.class);
 
 		List<ABean> a2b = c.getObject("a2", List.class, ABean.class);
-		assertObject(a2b).json().is("[{foo:'123'}]");
+		assertObject(a2b).asJson().is("[{foo:'123'}]");
 		assertObject(a2b.get(0)).isType(ABean.class);
 
 		Map<String,Integer> a3 = c.getObject("a3", Map.class, String.class, Integer.class);
 		assertNull(a3);
 
 		Map<String,Integer> a4a = c.getObject("a4", Map.class, String.class, Integer.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		ABean a4b = c.getObject("a4", ABean.class);
-		assertObject(a4b).json().is("{foo:'123'}");
+		assertObject(a4b).asJson().is("{foo:'123'}");
 		assertObject(a4b).isType(ABean.class);
 	}
 
@@ -500,29 +500,29 @@ public class ConfigTest {
 			);
 
 		Map<String,Integer> a1 = c.getObject("a1", UonParser.DEFAULT, Map.class, String.class, Integer.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		List<Map<String,Integer>> a2a = c.getObject("a2", UonParser.DEFAULT, List.class, Map.class, String.class, Integer.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(a2a.get(0).keySet().iterator().next()).isType(String.class);
 		assertObject(a2a.get(0).values().iterator().next()).isType(Integer.class);
 
 		List<ABean> a2b = c.getObject("a2", UonParser.DEFAULT, List.class, ABean.class);
-		assertObject(a2b).json().is("[{foo:'123'}]");
+		assertObject(a2b).asJson().is("[{foo:'123'}]");
 		assertObject(a2b.get(0)).isType(ABean.class);
 
 		Map<String,Integer> a3 = c.getObject("a3", UonParser.DEFAULT, Map.class, String.class, Integer.class);
 		assertNull(a3);
 
 		Map<String,Integer> a4a = c.getObject("a4", UonParser.DEFAULT, Map.class, String.class, Integer.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		ABean a4b = c.getObject("a4", UonParser.DEFAULT, ABean.class);
-		assertObject(a4b).json().is("{foo:'123'}");
+		assertObject(a4b).asJson().is("{foo:'123'}");
 		assertObject(a4b).isType(ABean.class);
 	}
 
@@ -542,12 +542,12 @@ public class ConfigTest {
 			);
 
 		Map a1 = c.getObject("a1", Map.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		List a2a = c.getObject("a2", List.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(((Map)a2a.get(0)).keySet().iterator().next()).isType(String.class);
 		assertObject(((Map)a2a.get(0)).values().iterator().next()).isType(Integer.class);
 
@@ -555,12 +555,12 @@ public class ConfigTest {
 		assertNull(a3);
 
 		Map a4a = c.getObject("a4", Map.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		ABean a4b = c.getObject("a4", ABean.class);
-		assertObject(a4b).json().is("{foo:'123'}");
+		assertObject(a4b).asJson().is("{foo:'123'}");
 		assertObject(a4b).isType(ABean.class);
 	}
 
@@ -580,12 +580,12 @@ public class ConfigTest {
 		);
 
 		Map a1 = c.getObject("a1", UonParser.DEFAULT, Map.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		List a2a = c.getObject("a2", UonParser.DEFAULT, List.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(((Map)a2a.get(0)).keySet().iterator().next()).isType(String.class);
 		assertObject(((Map)a2a.get(0)).values().iterator().next()).isType(Integer.class);
 
@@ -593,12 +593,12 @@ public class ConfigTest {
 		assertNull(a3);
 
 		Map a4a = c.getObject("a4", UonParser.DEFAULT, Map.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		ABean a4b = c.getObject("a4", UonParser.DEFAULT, ABean.class);
-		assertObject(a4b).json().is("{foo:'123'}");
+		assertObject(a4b).asJson().is("{foo:'123'}");
 		assertObject(a4b).isType(ABean.class);
 	}
 
@@ -618,34 +618,34 @@ public class ConfigTest {
 		);
 
 		Map a1 = c.getObjectWithDefault("a1", new OMap(), Map.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		Map a1b = c.getObjectWithDefault("a1b", new OMap(), Map.class);
-		assertObject(a1b).json().is("{}");
+		assertObject(a1b).asJson().is("{}");
 
 		List a2a = c.getObjectWithDefault("a2", new OList(), List.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(((Map)a2a.get(0)).keySet().iterator().next()).isType(String.class);
 		assertObject(((Map)a2a.get(0)).values().iterator().next()).isType(Integer.class);
 
 		List a2b = c.getObjectWithDefault("a2b", new OList(), List.class);
-		assertObject(a2b).json().is("[]");
+		assertObject(a2b).asJson().is("[]");
 
 		Map a3 = c.getObjectWithDefault("a3", new OMap(), Map.class);
-		assertObject(a3).json().is("{}");
+		assertObject(a3).asJson().is("{}");
 
 		Map a4a = c.getObjectWithDefault("a4", new OMap(), Map.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		Map a4b = c.getObjectWithDefault("a4b", new OMap(), Map.class);
-		assertObject(a4b).json().is("{}");
+		assertObject(a4b).asJson().is("{}");
 
 		ABean a4c = c.getObjectWithDefault("a4c", new ABean().init(), ABean.class);
-		assertObject(a4c).json().is("{foo:'bar'}");
+		assertObject(a4c).asJson().is("{foo:'bar'}");
 		assertObject(a4c).isType(ABean.class);
 	}
 
@@ -665,34 +665,34 @@ public class ConfigTest {
 		);
 
 		Map a1 = c.getObjectWithDefault("a1", UonParser.DEFAULT, new OMap(), Map.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		Map a1b = c.getObjectWithDefault("a1b", UonParser.DEFAULT, new OMap(), Map.class);
-		assertObject(a1b).json().is("{}");
+		assertObject(a1b).asJson().is("{}");
 
 		List a2a = c.getObjectWithDefault("a2", UonParser.DEFAULT, new OList(), List.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(((Map)a2a.get(0)).keySet().iterator().next()).isType(String.class);
 		assertObject(((Map)a2a.get(0)).values().iterator().next()).isType(Integer.class);
 
 		List a2b = c.getObjectWithDefault("a2b", UonParser.DEFAULT, new OList(), List.class);
-		assertObject(a2b).json().is("[]");
+		assertObject(a2b).asJson().is("[]");
 
 		Map a3 = c.getObjectWithDefault("a3", UonParser.DEFAULT, new OMap(), Map.class);
-		assertObject(a3).json().is("{}");
+		assertObject(a3).asJson().is("{}");
 
 		Map a4a = c.getObjectWithDefault("a4", UonParser.DEFAULT, new OMap(), Map.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		Map a4b = c.getObjectWithDefault("a4b", UonParser.DEFAULT, new OMap(), Map.class);
-		assertObject(a4b).json().is("{}");
+		assertObject(a4b).asJson().is("{}");
 
 		ABean a4c = c.getObjectWithDefault("a4c", UonParser.DEFAULT, new ABean().init(), ABean.class);
-		assertObject(a4c).json().is("{foo:'bar'}");
+		assertObject(a4c).asJson().is("{foo:'bar'}");
 		assertObject(a4c).isType(ABean.class);
 	}
 
@@ -711,34 +711,34 @@ public class ConfigTest {
 		);
 
 		Map<String,Integer> a1 = c.getObjectWithDefault("a1", new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		Map<String,Integer> a1b = c.getObjectWithDefault("a1b", new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a1b).json().is("{}");
+		assertObject(a1b).asJson().is("{}");
 
 		List<Map<String,Integer>> a2a = c.getObjectWithDefault("a2", new ArrayList<Map<String,Integer>>(), List.class, Map.class, String.class, Integer.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(a2a.get(0).keySet().iterator().next()).isType(String.class);
 		assertObject(a2a.get(0).values().iterator().next()).isType(Integer.class);
 
 		List<ABean> a2b = c.getObjectWithDefault("a2b", new ArrayList<ABean>(), List.class, ABean.class);
-		assertObject(a2b).json().is("[]");
+		assertObject(a2b).asJson().is("[]");
 
 		Map<String,Object> a3 = c.getObjectWithDefault("a3", new OMap(), Map.class, String.class, Object.class);
-		assertObject(a3).json().is("{}");
+		assertObject(a3).asJson().is("{}");
 
 		Map<String,Integer> a4a = c.getObjectWithDefault("a4", new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		Map<String,Integer> a4b = c.getObjectWithDefault("a4b", new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a4b).json().is("{}");
+		assertObject(a4b).asJson().is("{}");
 
 		ABean a4c = c.getObjectWithDefault("a4c", new ABean().init(), ABean.class);
-		assertObject(a4c).json().is("{foo:'bar'}");
+		assertObject(a4c).asJson().is("{foo:'bar'}");
 		assertObject(a4c).isType(ABean.class);
 	}
 
@@ -757,34 +757,34 @@ public class ConfigTest {
 		);
 
 		Map<String,Integer> a1 = c.getObjectWithDefault("a1", UonParser.DEFAULT, new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a1).json().is("{foo:123}");
+		assertObject(a1).asJson().is("{foo:123}");
 		assertObject(a1.keySet().iterator().next()).isType(String.class);
 		assertObject(a1.values().iterator().next()).isType(Integer.class);
 
 		Map<String,Integer> a1b = c.getObjectWithDefault("a1b", UonParser.DEFAULT, new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a1b).json().is("{}");
+		assertObject(a1b).asJson().is("{}");
 
 		List<Map<String,Integer>> a2a = c.getObjectWithDefault("a2", UonParser.DEFAULT, new ArrayList<Map<String,Integer>>(), List.class, Map.class, String.class, Integer.class);
-		assertObject(a2a).json().is("[{foo:123}]");
+		assertObject(a2a).asJson().is("[{foo:123}]");
 		assertObject(a2a.get(0).keySet().iterator().next()).isType(String.class);
 		assertObject(a2a.get(0).values().iterator().next()).isType(Integer.class);
 
 		List<ABean> a2b = c.getObjectWithDefault("a2b", UonParser.DEFAULT, new ArrayList<ABean>(), List.class, ABean.class);
-		assertObject(a2b).json().is("[]");
+		assertObject(a2b).asJson().is("[]");
 
 		Map<String,Object> a3 = c.getObjectWithDefault("a3", UonParser.DEFAULT, new OMap(), Map.class, String.class, Object.class);
-		assertObject(a3).json().is("{}");
+		assertObject(a3).asJson().is("{}");
 
 		Map<String,Integer> a4a = c.getObjectWithDefault("a4", UonParser.DEFAULT, new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a4a).json().is("{foo:123}");
+		assertObject(a4a).asJson().is("{foo:123}");
 		assertObject(a4a.keySet().iterator().next()).isType(String.class);
 		assertObject(a4a.values().iterator().next()).isType(Integer.class);
 
 		Map<String,Integer> a4b = c.getObjectWithDefault("a4b", UonParser.DEFAULT, new HashMap<String,Integer>(), Map.class, String.class, Integer.class);
-		assertObject(a4b).json().is("{}");
+		assertObject(a4b).asJson().is("{}");
 
 		ABean a4c = c.getObjectWithDefault("a4c", UonParser.DEFAULT, new ABean().init(), ABean.class);
-		assertObject(a4c).json().is("{foo:'bar'}");
+		assertObject(a4c).asJson().is("{foo:'bar'}");
 		assertObject(a4c).isType(ABean.class);
 	}
 
@@ -795,9 +795,9 @@ public class ConfigTest {
 	public void getKeys() throws Exception {
 		Config c = init("a1=1", "a2=2", "[S]", "b1=1", "b2=");
 
-		assertObject(c.getKeys("")).json().is("['a1','a2']");
-		assertObject(c.getKeys("")).json().is("['a1','a2']");
-		assertObject(c.getKeys("S")).json().is("['b1','b2']");
+		assertObject(c.getKeys("")).asJson().is("['a1','a2']");
+		assertObject(c.getKeys("")).asJson().is("['a1','a2']");
+		assertObject(c.getKeys("S")).asJson().is("['b1','b2']");
 		assertTrue(c.getKeys("T").isEmpty());
 
 		assertThrown(()->c.getKeys(null)).is("Field 'section' cannot be null.");
@@ -813,15 +813,15 @@ public class ConfigTest {
 
 		Config c = init("foo=qux", "[S]", "foo=baz", "bar=baz");
 		c.writeProperties("S", a, true);
-		assertObject(a).json().is("{foo:'baz'}");
+		assertObject(a).asJson().is("{foo:'baz'}");
 		c.writeProperties("S", b, true);
-		assertObject(b).json().is("{foo:'baz'}");
+		assertObject(b).asJson().is("{foo:'baz'}");
 		assertThrown(()->c.writeProperties("S", a, false)).is("Unknown property 'bar' encountered in configuration section 'S'.");
 		assertThrown(()->c.writeProperties("S", b, false)).is("Unknown property 'bar' encountered in configuration section 'S'.");
 		c.writeProperties("", b, true);
-		assertObject(b).json().is("{foo:'qux'}");
+		assertObject(b).asJson().is("{foo:'qux'}");
 		c.writeProperties("", a, true);
-		assertObject(a).json().is("{foo:'qux'}");
+		assertObject(a).asJson().is("{foo:'qux'}");
 
 		assertThrown(()->c.writeProperties(null, a, true)).is("Field 'section' cannot be null.");
 	}
@@ -837,18 +837,18 @@ public class ConfigTest {
 		BBean b = null;
 
 		a = c.getSectionAsBean("", ABean.class);
-		assertObject(a).json().is("{foo:'qux'}");
+		assertObject(a).asJson().is("{foo:'qux'}");
 		a = c.getSectionAsBean("", ABean.class);
-		assertObject(a).json().is("{foo:'qux'}");
+		assertObject(a).asJson().is("{foo:'qux'}");
 		a = c.getSectionAsBean("S", ABean.class);
-		assertObject(a).json().is("{foo:'baz'}");
+		assertObject(a).asJson().is("{foo:'baz'}");
 
 		b = c.getSectionAsBean("", BBean.class);
-		assertObject(b).json().is("{foo:'qux'}");
+		assertObject(b).asJson().is("{foo:'qux'}");
 		b = c.getSectionAsBean("", BBean.class);
-		assertObject(b).json().is("{foo:'qux'}");
+		assertObject(b).asJson().is("{foo:'qux'}");
 		b = c.getSectionAsBean("S", BBean.class);
-		assertObject(b).json().is("{foo:'baz'}");
+		assertObject(b).asJson().is("{foo:'baz'}");
 
 		assertThrown(()->c.getSectionAsBean("T", ABean.class)).is("Unknown property 'bar' encountered in configuration section 'T'.");
 		assertThrown(()->c.getSectionAsBean("T", BBean.class)).is("Unknown property 'bar' encountered in configuration section 'T'.");
@@ -867,9 +867,9 @@ public class ConfigTest {
 		BBean b = null;
 
 		a = c.getSectionAsBean("T", ABean.class, true);
-		assertObject(a).json().is("{foo:'qux'}");
+		assertObject(a).asJson().is("{foo:'qux'}");
 		b = c.getSectionAsBean("T", BBean.class, true);
-		assertObject(b).json().is("{foo:'qux'}");
+		assertObject(b).asJson().is("{foo:'qux'}");
 
 		assertThrown(()->c.getSectionAsBean("T", ABean.class, false)).is("Unknown property 'bar' encountered in configuration section 'T'.");
 		assertThrown(()->c.getSectionAsBean("T", BBean.class, false)).is("Unknown property 'bar' encountered in configuration section 'T'.");
@@ -882,10 +882,10 @@ public class ConfigTest {
 	public void getSectionAsMap() throws Exception {
 		Config c = init("a=1", "[S]", "b=2", "[T]");
 
-		assertObject(c.getSectionAsMap("")).json().is("{a:'1'}");
-		assertObject(c.getSectionAsMap("")).json().is("{a:'1'}");
-		assertObject(c.getSectionAsMap("S")).json().is("{b:'2'}");
-		assertObject(c.getSectionAsMap("T")).json().is("{}");
+		assertObject(c.getSectionAsMap("")).asJson().is("{a:'1'}");
+		assertObject(c.getSectionAsMap("")).asJson().is("{a:'1'}");
+		assertObject(c.getSectionAsMap("S")).asJson().is("{b:'2'}");
+		assertObject(c.getSectionAsMap("T")).asJson().is("{}");
 		assertNull(c.getSectionAsMap("U"));
 
 		assertThrown(()->c.getSectionAsMap(null)).is("Field 'section' cannot be null.");
@@ -1191,7 +1191,7 @@ public class ConfigTest {
 
 		cf.set("foo", "bar".getBytes("UTF-8"));
 		assertEquals("626172", cf.get("foo"));
-		assertObject(cf.getBytes("foo")).json().is("[98,97,114]");
+		assertObject(cf.getBytes("foo")).asJson().is("[98,97,114]");
 	}
 
 	//====================================================================================================
@@ -1203,7 +1203,7 @@ public class ConfigTest {
 
 		cf.set("foo", "bar".getBytes("UTF-8"));
 		assertEquals("62 61 72", cf.get("foo"));
-		assertObject(cf.getBytes("foo")).json().is("[98,97,114]");
+		assertObject(cf.getBytes("foo")).asJson().is("[98,97,114]");
 	}
 
 	//====================================================================================================
@@ -1276,9 +1276,9 @@ public class ConfigTest {
 		cf.set("a3", 3);
 		cf.set("B/b1", 3);
 		cf.set("B/b3", 3);
-		assertObject(changes).json().is("[]");
+		assertObject(changes).asJson().is("[]");
 		cf.commit();
-		assertObject(changes).json().is("['a1=3','a3=3','B/b1=3','B/b3=3']");
+		assertObject(changes).asJson().is("['a1=3','a3=3','B/b1=3','B/b3=3']");
 
 		// Rollback.
 		changes.clear();
@@ -1286,10 +1286,10 @@ public class ConfigTest {
 		cf.set("a3", 3);
 		cf.set("B/b1", 3);
 		cf.set("B/b3", 3);
-		assertObject(changes).json().is("[]");
+		assertObject(changes).asJson().is("[]");
 		cf.rollback();
 		cf.commit();
-		assertObject(changes).json().is("[]");
+		assertObject(changes).asJson().is("[]");
 
 		// Overwrite
 		changes.clear();
@@ -1300,21 +1300,21 @@ public class ConfigTest {
 		cf.set("C/c1", "2");
 		cf.set("C/c2", "2");
 		cf.commit();
-		assertObject(changes).json().is("['a1=2','a2=2','B/b1=2','B/b2=2','C/c1=2','C/c2=2']");
+		assertObject(changes).asJson().is("['a1=2','a2=2','B/b1=2','B/b2=2','C/c1=2','C/c2=2']");
 
 		// Encoded
 		changes.clear();
 		cf.set("a4", "4", null, ConfigMod.ENCODED, null, null);
 		cf.set("B/b4", "4", null, ConfigMod.ENCODED, null, null);
 		cf.commit();
-		assertObject(changes).json().is("['a4={Wg==}','B/b4={Wg==}']");
+		assertObject(changes).asJson().is("['a4={Wg==}','B/b4={Wg==}']");
 
 		// Encoded overwrite
 		changes.clear();
 		cf.set("a4", "5");
 		cf.set("B/b4", "5");
 		cf.commit();
-		assertObject(changes).json().is("['a4={Ww==}','B/b4={Ww==}']");
+		assertObject(changes).asJson().is("['a4={Ww==}','B/b4={Ww==}']");
 
 		// Remove entries
 		changes.clear();
@@ -1324,32 +1324,32 @@ public class ConfigTest {
 		cf.remove("B/bx");
 		cf.remove("X/bx");
 		cf.commit();
-		assertObject(changes).json().is("['REMOVE_ENTRY(a4)','REMOVE_ENTRY(B/b4)']");
+		assertObject(changes).asJson().is("['REMOVE_ENTRY(a4)','REMOVE_ENTRY(B/b4)']");
 
 		// Add section
 		// Shouldn't trigger listener.
 		changes.clear();
 		cf.setSection("D", Arrays.asList("#comment"));
 		cf.commit();
-		assertObject(changes).json().is("[]");
+		assertObject(changes).asJson().is("[]");
 
 		// Add section with contents
 		changes.clear();
 		cf.setSection("E", null, AMap.of("e1","1","e2","2"));
 		cf.commit();
-		assertObject(changes).json().is("['E/e1=1','E/e2=2']");
+		assertObject(changes).asJson().is("['E/e1=1','E/e2=2']");
 
 		// Remove section
 		changes.clear();
 		cf.removeSection("E");
 		cf.commit();
-		assertObject(changes).json().is("['REMOVE_ENTRY(E/e1)','REMOVE_ENTRY(E/e2)']");
+		assertObject(changes).asJson().is("['REMOVE_ENTRY(E/e1)','REMOVE_ENTRY(E/e2)']");
 
 		// Remove non-existent section
 		changes.clear();
 		cf.removeSection("E");
 		cf.commit();
-		assertObject(changes).json().is("[]");
+		assertObject(changes).asJson().is("[]");
 	}
 
 	//====================================================================================================
@@ -1359,34 +1359,34 @@ public class ConfigTest {
 	@Test
 	public void testGetObjectArray() throws Exception {
 		Config cf = init("[A]", "a1=[1,2,3]");
-		assertObject(cf.getObject("A/a1", Integer[].class)).json().is("[1,2,3]");
-		assertObject(cf.getObjectWithDefault("A/a2", new Integer[]{4,5,6}, Integer[].class)).json().is("[4,5,6]");
-		assertObject(cf.getObjectWithDefault("B/a1", new Integer[]{7,8,9}, Integer[].class)).json().is("[7,8,9]");
+		assertObject(cf.getObject("A/a1", Integer[].class)).asJson().is("[1,2,3]");
+		assertObject(cf.getObjectWithDefault("A/a2", new Integer[]{4,5,6}, Integer[].class)).asJson().is("[4,5,6]");
+		assertObject(cf.getObjectWithDefault("B/a1", new Integer[]{7,8,9}, Integer[].class)).asJson().is("[7,8,9]");
 		assertNull(cf.getObject("B/a1", Integer[].class));
 
 		cf = init("[A]", "a1 = [1 ,\n\t2 ,\n\t3] ");
-		assertObject(cf.getObject("A/a1", Integer[].class)).json().is("[1,2,3]");
+		assertObject(cf.getObject("A/a1", Integer[].class)).asJson().is("[1,2,3]");
 
 		// We cannot cast primitive arrays to Object[], so the following throws exceptions.
-		assertObject(cf.getObject("A/a1", int[].class)).json().is("[1,2,3]");
+		assertObject(cf.getObject("A/a1", int[].class)).asJson().is("[1,2,3]");
 		assertEquals("int", cf.getObject("A/a1", int[].class).getClass().getComponentType().getSimpleName());
 		assertNull(cf.getObject("B/a1", int[].class));
 		assertEquals("int", cf.getObjectWithDefault("B/a1", new int[0], int[].class).getClass().getComponentType().getSimpleName());
 		assertNull(cf.getObject("A/a2", int[].class));
 		assertEquals("int", cf.getObjectWithDefault("A/a2", new int[0], int[].class).getClass().getComponentType().getSimpleName());
 
-		assertObject(cf.getObjectWithDefault("A/a1", new int[]{4}, int[].class)).json().is("[1,2,3]");
+		assertObject(cf.getObjectWithDefault("A/a1", new int[]{4}, int[].class)).asJson().is("[1,2,3]");
 		assertEquals("int", cf.getObjectWithDefault("A/a1", new int[]{4}, int[].class).getClass().getComponentType().getSimpleName());
-		assertObject(cf.getObjectWithDefault("B/a1", new int[]{4}, int[].class)).json().is("[4]");
+		assertObject(cf.getObjectWithDefault("B/a1", new int[]{4}, int[].class)).asJson().is("[4]");
 		assertEquals("int", cf.getObjectWithDefault("B/a1", new int[]{4}, int[].class).getClass().getComponentType().getSimpleName());
-		assertObject(cf.getObjectWithDefault("A/a2", new int[]{4}, int[].class)).json().is("[4]");
+		assertObject(cf.getObjectWithDefault("A/a2", new int[]{4}, int[].class)).asJson().is("[4]");
 		assertEquals("int", cf.getObjectWithDefault("A/a2", new int[]{4}, int[].class).getClass().getComponentType().getSimpleName());
 
 		System.setProperty("X", "[4,5,6]");
 		cf = init("x1=$C{A/a1}", "x2=$S{X}", "x3=$S{Y}", "[A]", "a1=[1,2,3]");
-		assertObject(cf.getObjectWithDefault("x1", new int[]{9}, int[].class)).json().is("[1,2,3]");
-		assertObject(cf.getObjectWithDefault("x2", new int[]{9}, int[].class)).json().is("[4,5,6]");
-		assertObject(cf.getObjectWithDefault("x3", new int[]{9}, int[].class)).json().is("[9]");
+		assertObject(cf.getObjectWithDefault("x1", new int[]{9}, int[].class)).asJson().is("[1,2,3]");
+		assertObject(cf.getObjectWithDefault("x2", new int[]{9}, int[].class)).asJson().is("[4,5,6]");
+		assertObject(cf.getObjectWithDefault("x3", new int[]{9}, int[].class)).asJson().is("[9]");
 		System.clearProperty("X");
 	}
 
@@ -1397,19 +1397,19 @@ public class ConfigTest {
 	@Test
 	public void testGetStringArray() throws Exception {
 		Config cf = init("[A]", "a1=1,2,3");
-		assertObject(cf.getStringArray("A/a1")).json().is("['1','2','3']");
-		assertObject(cf.getStringArray("A/a2", new String[]{"4","5","6"})).json().is("['4','5','6']");
-		assertObject(cf.getStringArray("B/a1", new String[]{"7","8","9"})).json().is("['7','8','9']");
-		assertObject(cf.getStringArray("B/a1")).json().is("[]");
+		assertObject(cf.getStringArray("A/a1")).asJson().is("['1','2','3']");
+		assertObject(cf.getStringArray("A/a2", new String[]{"4","5","6"})).asJson().is("['4','5','6']");
+		assertObject(cf.getStringArray("B/a1", new String[]{"7","8","9"})).asJson().is("['7','8','9']");
+		assertObject(cf.getStringArray("B/a1")).asJson().is("[]");
 
 		cf = init("[A]", "a1 = 1 ,\n\t2 ,\n\t3 ");
-		assertObject(cf.getStringArray("A/a1")).json().is("['1','2','3']");
+		assertObject(cf.getStringArray("A/a1")).asJson().is("['1','2','3']");
 
 		System.setProperty("X", "4,5,6");
 		cf = init(null, "x1=$C{A/a1}", "x2=$S{X}", "x3=$S{Y}", "x4=$S{Y,$S{X}}", "[A]", "a1=1,2,3");
-		assertObject(cf.getStringArray("x1", new String[]{"9"})).json().is("['1','2','3']");
-		assertObject(cf.getStringArray("x2", new String[]{"9"})).json().is("['4','5','6']");
-		assertObject(cf.getStringArray("x3", new String[]{"9"})).json().is("['9']");
+		assertObject(cf.getStringArray("x1", new String[]{"9"})).asJson().is("['1','2','3']");
+		assertObject(cf.getStringArray("x2", new String[]{"9"})).asJson().is("['4','5','6']");
+		assertObject(cf.getStringArray("x3", new String[]{"9"})).asJson().is("['9']");
 
 		System.clearProperty("X");
 	}
@@ -1421,16 +1421,16 @@ public class ConfigTest {
 	public void testGetSectionMap() throws Exception {
 		Config cf = init("[A]", "a1=1", "", "[D]", "d1=$C{A/a1}","d2=$S{X}");
 
-		assertObject(cf.getSectionAsMap("A")).json().is("{a1:'1'}");
+		assertObject(cf.getSectionAsMap("A")).asJson().is("{a1:'1'}");
 		assertNull(cf.getSectionAsMap("B"));
-		assertObject(cf.getSectionAsMap("C")).json().is("null");
+		assertObject(cf.getSectionAsMap("C")).asJson().is("null");
 
 		OMap m = cf.getSectionAsMap("A");
-		assertObject(m).json().is("{a1:'1'}");
+		assertObject(m).asJson().is("{a1:'1'}");
 
 		System.setProperty("X", "x");
 		m = cf.getSectionAsMap("D");
-		assertObject(m).json().is("{d1:'1',d2:'x'}");
+		assertObject(m).asJson().is("{d1:'1',d2:'x'}");
 		System.clearProperty("X");
 	}
 
@@ -1569,10 +1569,10 @@ public class ConfigTest {
 	public void testGetCandidateSystemDefaultConfigNames() {
 
 		System.setProperty("juneau.configFile", "foo.txt");
-		assertObject(Config.getCandidateSystemDefaultConfigNames()).json().is("['foo.txt']");
+		assertObject(Config.getCandidateSystemDefaultConfigNames()).asJson().is("['foo.txt']");
 
 		System.clearProperty("juneau.configFile");
-		assertObject(Config.getCandidateSystemDefaultConfigNames()).json().is("['test.cfg','juneau.cfg','default.cfg','application.cfg','app.cfg','settings.cfg','application.properties']");
+		assertObject(Config.getCandidateSystemDefaultConfigNames()).asJson().is("['test.cfg','juneau.cfg','default.cfg','application.cfg','app.cfg','settings.cfg','application.properties']");
 	}
 
 	//====================================================================================================
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
index ffe720f..c0e951b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
@@ -38,7 +38,7 @@ public class FileFinder_Test {
 			.create()
 			.build();
 
-		assertStream(x.getStream("files/test1a")).string().doesNotExist();
+		assertStream(x.getStream("files/test1a")).asString().doesNotExist();
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -55,12 +55,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("files/test1/"+p)).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/"+p)).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/dir/"+p)).string().contains("[home:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/"+p+" / ")).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).string().contains("[home:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/"+p)).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/"+p)).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/dir/"+p)).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/"+p+" / ")).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
 		}
 
 		String[] badPatterns = {"files/test1/bad.txt","files/test1/../test1/_a.txt","files/test1/%2E%2E/test1/_a.txt","files/bad.txt",null,"",".","..","%2E","%2E%2E","j.class","k.properties"};
@@ -80,12 +80,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("test1/"+p)).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p)).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p)).string().contains("[home:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream("/test1/"+p+"/")).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/")).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/")).string().contains("[home:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("test1/"+p)).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p)).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p)).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("/test1/"+p+"/")).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/")).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/")).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
 		}
 
 		String[] badPatterns = {"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
@@ -109,26 +109,26 @@ public class FileFinder_Test {
 		for (int i = 0; i < patterns.length; i++) {
 			String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP = patterns_ja_JP[i];
 
-			assertStream(x.getStream("test1/"+p,null)).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p,null)).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,null)).string().contains("[home:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream("/test1/"+p+"/",null)).string().contains("[home:/files/test1/"+p+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",null)).string().contains("[home:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).string().contains("[home:/files/test1/dir/dir/"+p+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPANESE)).string().contains("[home:/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).string().contains("[home:/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).string().contains("[home:/files/test1/dir/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).string().contains("[home:/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).string().contains("[home:/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).string().contains("[home:/files/test1/dir/dir/"+p_ja+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPAN)).string().contains("[home:/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPAN)).string().contains("[home:/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).string().contains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).string().contains("[home:/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).string().contains("[home:/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).string().contains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/"+p,null)).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p,null)).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,null)).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("/test1/"+p+"/",null)).asString().contains("[home:/files/test1/"+p+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",null)).asString().contains("[home:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).asString().contains("[home:/files/test1/dir/dir/"+p+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPANESE)).asString().contains("[home:/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).asString().contains("[home:/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).asString().contains("[home:/files/test1/dir/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).asString().contains("[home:/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).asString().contains("[home:/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).asString().contains("[home:/files/test1/dir/dir/"+p_ja+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPAN)).asString().contains("[home:/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPAN)).asString().contains("[home:/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).asString().contains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).asString().contains("[home:/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).asString().contains("[home:/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).asString().contains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
 		}
 
 		String[] badPatterns = {"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".","..","j.class","k.properties"};
@@ -147,26 +147,26 @@ public class FileFinder_Test {
 			.dir("files/test2")
 			.build();
 
-		assertStream(x.getStream("a.txt", null)).string().contains("[home:/files/test2/a.txt]");
-		assertStream(x.getStream("a.txt", JAPANESE)).string().contains("[home:/files/test2/ja/a.txt]");
-		assertStream(x.getStream("a.txt", JAPAN)).string().contains("[home:/files/test2/ja/JP/a.txt]");
-		assertStream(x.getStream("/a.txt/", null)).string().contains("[home:/files/test2/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPANESE)).string().contains("[home:/files/test2/ja/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPAN)).string().contains("[home:/files/test2/ja/JP/a.txt]");
-
-		assertStream(x.getStream("dir/a.txt", null)).string().contains("[home:/files/test2/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPANESE)).string().contains("[home:/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPAN)).string().contains("[home:/files/test2/ja/JP/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", null)).string().contains("[home:/files/test2/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).string().contains("[home:/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPAN)).string().contains("[home:/files/test2/ja/JP/dir/a.txt]");
-
-		assertStream(x.getStream("dir/dir/a.txt", null)).string().contains("[home:/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).string().contains("[home:/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).string().contains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", null)).string().contains("[home:/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).string().contains("[home:/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).string().contains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("a.txt", null)).asString().contains("[home:/files/test2/a.txt]");
+		assertStream(x.getStream("a.txt", JAPANESE)).asString().contains("[home:/files/test2/ja/a.txt]");
+		assertStream(x.getStream("a.txt", JAPAN)).asString().contains("[home:/files/test2/ja/JP/a.txt]");
+		assertStream(x.getStream("/a.txt/", null)).asString().contains("[home:/files/test2/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPANESE)).asString().contains("[home:/files/test2/ja/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPAN)).asString().contains("[home:/files/test2/ja/JP/a.txt]");
+
+		assertStream(x.getStream("dir/a.txt", null)).asString().contains("[home:/files/test2/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPANESE)).asString().contains("[home:/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPAN)).asString().contains("[home:/files/test2/ja/JP/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", null)).asString().contains("[home:/files/test2/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).asString().contains("[home:/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPAN)).asString().contains("[home:/files/test2/ja/JP/dir/a.txt]");
+
+		assertStream(x.getStream("dir/dir/a.txt", null)).asString().contains("[home:/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).asString().contains("[home:/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).asString().contains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", null)).asString().contains("[home:/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).asString().contains("[home:/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).asString().contains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -183,12 +183,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("files/test1/"+p)).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/"+p)).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/dir/"+p)).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/"+p+" / ")).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/"+p)).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/"+p)).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/dir/"+p)).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/"+p+" / ")).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
 		}
 
 		String[] badPatterns = {"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".","..","LocalizedFileStore_Test.class"};
@@ -208,12 +208,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("test1/"+p)).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p)).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p)).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/"+p+" / ")).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/"+p+" / ")).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("test1/"+p)).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p)).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p)).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/"+p+" / ")).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/"+p+" / ")).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
 		}
 
 		String[] badPatterns = {"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
@@ -238,26 +238,26 @@ public class FileFinder_Test {
 		for (int i = 0; i < patterns.length; i++) {
 			String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP = patterns_ja_JP[i];
 
-			assertStream(x.getStream("test1/"+p,null)).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p,null)).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,null)).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream("/test1/"+p+"/",null)).string().contains("[cp:/files/test1/"+p+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",null)).string().contains("[cp:/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).string().contains("[cp:/files/test1/dir/dir/"+p+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPANESE)).string().contains("[cp:/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).string().contains("[cp:/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).string().contains("[cp:/files/test1/dir/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).string().contains("[cp:/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).string().contains("[cp:/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).string().contains("[cp:/files/test1/dir/dir/"+p_ja+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPAN)).string().contains("[cp:/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPAN)).string().contains("[cp:/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).string().contains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).string().contains("[cp:/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).string().contains("[cp:/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).string().contains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/"+p,null)).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p,null)).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,null)).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("/test1/"+p+"/",null)).asString().contains("[cp:/files/test1/"+p+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",null)).asString().contains("[cp:/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).asString().contains("[cp:/files/test1/dir/dir/"+p+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPANESE)).asString().contains("[cp:/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).asString().contains("[cp:/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).asString().contains("[cp:/files/test1/dir/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).asString().contains("[cp:/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/files/test1/dir/dir/"+p_ja+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPAN)).asString().contains("[cp:/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPAN)).asString().contains("[cp:/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).asString().contains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).asString().contains("[cp:/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).asString().contains("[cp:/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).asString().contains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
 		}
 
 		String[] badPatterns = {"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
@@ -277,26 +277,26 @@ public class FileFinder_Test {
 			.cp(FileFinder_Test.class, "/files/test2", false)
 			.build();
 
-		assertStream(x.getStream("a.txt", null)).string().contains("[cp:/files/test2/a.txt]");
-		assertStream(x.getStream("a.txt", JAPANESE)).string().contains("[cp:/files/test2/ja/a.txt]");
-		assertStream(x.getStream("a.txt", JAPAN)).string().contains("[cp:/files/test2/ja/JP/a.txt]");
-		assertStream(x.getStream("/a.txt/", null)).string().contains("[cp:/files/test2/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPANESE)).string().contains("[cp:/files/test2/ja/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPAN)).string().contains("[cp:/files/test2/ja/JP/a.txt]");
-
-		assertStream(x.getStream("dir/a.txt", null)).string().contains("[cp:/files/test2/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPANESE)).string().contains("[cp:/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPAN)).string().contains("[cp:/files/test2/ja/JP/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", null)).string().contains("[cp:/files/test2/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).string().contains("[cp:/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPAN)).string().contains("[cp:/files/test2/ja/JP/dir/a.txt]");
-
-		assertStream(x.getStream("dir/dir/a.txt", null)).string().contains("[cp:/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).string().contains("[cp:/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).string().contains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", null)).string().contains("[cp:/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).string().contains("[cp:/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).string().contains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("a.txt", null)).asString().contains("[cp:/files/test2/a.txt]");
+		assertStream(x.getStream("a.txt", JAPANESE)).asString().contains("[cp:/files/test2/ja/a.txt]");
+		assertStream(x.getStream("a.txt", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/a.txt]");
+		assertStream(x.getStream("/a.txt/", null)).asString().contains("[cp:/files/test2/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPANESE)).asString().contains("[cp:/files/test2/ja/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/a.txt]");
+
+		assertStream(x.getStream("dir/a.txt", null)).asString().contains("[cp:/files/test2/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPANESE)).asString().contains("[cp:/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", null)).asString().contains("[cp:/files/test2/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).asString().contains("[cp:/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/dir/a.txt]");
+
+		assertStream(x.getStream("dir/dir/a.txt", null)).asString().contains("[cp:/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).asString().contains("[cp:/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", null)).asString().contains("[cp:/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).asString().contains("[cp:/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).asString().contains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -313,15 +313,15 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("files/test1/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
 		}
 
-		assertStream(x.getStream("_a.txt")).string().contains("[cp:/org/apache/juneau/cp/_a.txt]");
+		assertStream(x.getStream("_a.txt")).asString().contains("[cp:/org/apache/juneau/cp/_a.txt]");
 
 		String[] badPatterns = {"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
 
@@ -340,12 +340,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("files/test1/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("files/test1/dir/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("files/test1/dir/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / files/test1/dir/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
 		}
 	}
 
@@ -359,12 +359,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("test1/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("test1/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
 		}
 
 		String[] badPatterns = {"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
@@ -384,12 +384,12 @@ public class FileFinder_Test {
 		String[] patterns = {"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
 		for (String p : patterns) {
-			assertStream(x.getStream("test1/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("test1/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream(" / test1/dir/dir/"+p+" / ")).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
 		}
 	}
 
@@ -408,26 +408,26 @@ public class FileFinder_Test {
 		for (int i = 0; i < patterns.length; i++) {
 			String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP = patterns_ja_JP[i];
 
-			assertStream(x.getStream("test1/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream("/test1/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("/test1/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
 		}
 
 		String[] badPatterns = {"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
@@ -454,26 +454,26 @@ public class FileFinder_Test {
 		for (int i = 0; i < patterns.length; i++) {
 			String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP = patterns_ja_JP[i];
 
-			assertStream(x.getStream("test1/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("test1/dir/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-			assertStream(x.getStream("/test1/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-
-			assertStream(x.getStream("test1/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("test1/dir/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+			assertStream(x.getStream("/test1/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",null)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
+
+			assertStream(x.getStream("test1/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("test1/dir/dir/"+p,JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
+			assertStream(x.getStream("/test1/dir/dir/"+p+"/",JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
 		}
 	}
 
@@ -484,26 +484,26 @@ public class FileFinder_Test {
 			.cp(FileFinder_Test.class, "files/test2", false)
 			.build();
 
-		assertStream(x.getStream("a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-		assertStream(x.getStream("a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-		assertStream(x.getStream("a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-		assertStream(x.getStream("/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-
-		assertStream(x.getStream("dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-
-		assertStream(x.getStream("dir/dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
+		assertStream(x.getStream("a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
+		assertStream(x.getStream("a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+		assertStream(x.getStream("/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+
+		assertStream(x.getStream("dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+
+		assertStream(x.getStream("dir/dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
 	}
 
 	@Test
@@ -513,26 +513,26 @@ public class FileFinder_Test {
 			.cp(FileFinder_Test2.class, "files/test2", true)
 			.build();
 
-		assertStream(x.getStream("a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-		assertStream(x.getStream("a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-		assertStream(x.getStream("a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-		assertStream(x.getStream("/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-		assertStream(x.getStream("/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-
-		assertStream(x.getStream("dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("/dir/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-
-		assertStream(x.getStream("dir/dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
+		assertStream(x.getStream("a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
+		assertStream(x.getStream("a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+		assertStream(x.getStream("/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
+		assertStream(x.getStream("/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+
+		assertStream(x.getStream("dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("/dir/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+
+		assertStream(x.getStream("dir/dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("/dir/dir/a.txt/", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
 
 		x = FileFinder
 			.create()
@@ -585,17 +585,17 @@ public class FileFinder_Test {
 			.exclude()
 			.build();
 
-		assertStream(x.getStream("a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-		assertStream(x.getStream("a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-		assertStream(x.getStream("a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+		assertStream(x.getStream("a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
+		assertStream(x.getStream("a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
+		assertStream(x.getStream("a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
 
-		assertStream(x.getStream("dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-		assertStream(x.getStream("dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
+		assertStream(x.getStream("dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
 
-		assertStream(x.getStream("dir/dir/a.txt", null)).string().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).string().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", null)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPANESE)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
+		assertStream(x.getStream("dir/dir/a.txt", JAPAN)).asString().contains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -630,8 +630,8 @@ public class FileFinder_Test {
 			.caching(100_000_000)
 			.build();
 
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[home:/files/test1/_a.txt]");
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[home:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[home:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[home:/files/test1/_a.txt]");
 
 		x = FileFinder
 			.create()
@@ -639,8 +639,8 @@ public class FileFinder_Test {
 			.caching(1)
 			.build();
 
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[home:/files/test1/_a.txt]");
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[home:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[home:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[home:/files/test1/_a.txt]");
 
 		x = FileFinder
 			.create()
@@ -648,8 +648,8 @@ public class FileFinder_Test {
 			.caching(100_000_000)
 			.build();
 
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[cp:/files/test1/_a.txt]");
-		assertStream(x.getStream("files/test1/_a.txt")).string().contains("[cp:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[cp:/files/test1/_a.txt]");
+		assertStream(x.getStream("files/test1/_a.txt")).asString().contains("[cp:/files/test1/_a.txt]");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/Messages_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/Messages_Test.java
index df86893..8ab277e 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/Messages_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/cp/Messages_Test.java
@@ -125,7 +125,7 @@ public class Messages_Test {
 	@Test
 	public void a09_keySet_prefix() throws Exception {
 		Messages x = Messages.of(MessageBundleTest1.class);
-		assertObject(new TreeSet<>(x.keySet("xx"))).json().is("['xx','xx.','xx.foo']");
+		assertObject(new TreeSet<>(x.keySet("xx"))).asJson().is("['xx','xx.','xx.foo']");
 	}
 
 	@Test
@@ -155,7 +155,7 @@ public class Messages_Test {
 	@Test
 	public void a12_getKeys() throws Exception {
 		Messages x = Messages.of(Test2.class);
-		assertObject(x.getKeys()).json().is("['file','yyy']");
+		assertObject(x.getKeys()).asJson().is("['file','yyy']");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/csv/annotation/CsvAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/csv/annotation/CsvAnnotation_Test.java
index 91d2fe4..a0b9f3d 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/csv/annotation/CsvAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/csv/annotation/CsvAnnotation_Test.java
@@ -38,7 +38,7 @@ public class CsvAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['a'],"
 				+ "onClass:[]"
@@ -83,10 +83,10 @@ public class CsvAnnotation_Test {
 		Csv c3 = CsvAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Csv c4 = CsvAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
index a2555a7..835d3cd 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
@@ -101,7 +101,7 @@ public class AtomTest {
 		r = s.serialize(f);
 		assertEquals(expected, r);
 		f2 = p.parse(r, Feed.class);
-		assertObject(f).sameAs(f2);
+		assertObject(f).isSameJsonAs(f2);
 	}
 
 	@Test
@@ -146,7 +146,7 @@ public class AtomTest {
 		r = s.serialize(f);
 		assertEquals(expected, r);
 		f2 = p.parse(r, Feed.class);
-		assertObject(f).sameAs(f2);
+		assertObject(f).isSameJsonAs(f2);
 	}
 
 	@Test
@@ -191,7 +191,7 @@ public class AtomTest {
 		r = s.serialize(f);
 		assertEquals(expected, r);
 		f2 = p.parse(r, Feed.class);
-		assertObject(f).sameAs(f2);
+		assertObject(f).isSameJsonAs(f2);
 	}
 
 	@Test
@@ -201,6 +201,6 @@ public class AtomTest {
 		Feed f = createFeed(), f2;
 		r = f.toString();
 		f2 = p.parse(r, Feed.class);
-		assertObject(f).sameAs(f2);
+		assertObject(f).isSameJsonAs(f2);
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
index b4b2917..e97cd48 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java
@@ -87,7 +87,7 @@ public class Contact_Test {
 			.set("email", "baz")
 			.set("$ref", "qux");
 
-		assertObject(t).json().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
+		assertObject(t).asJson().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
 
 		t
 			.set("name", new StringBuilder("foo"))
@@ -95,10 +95,10 @@ public class Contact_Test {
 			.set("email", new StringBuilder("baz"))
 			.set("$ref", new StringBuilder("qux"));
 
-		assertObject(t).json().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
+		assertObject(t).asJson().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
 
 		assertObject(t.get("name", String.class)).isType(String.class).is("foo");
-		assertObject(t.get("url", URI.class)).isType(URI.class).string().is("bar");
+		assertObject(t.get("url", URI.class)).isType(URI.class).asString().is("bar");
 		assertObject(t.get("email", String.class)).isType(String.class).is("baz");
 		assertObject(t.get("$ref", String.class)).isType(String.class).is("qux");
 
@@ -107,7 +107,7 @@ public class Contact_Test {
 		assertObject(t.get(null, Object.class)).isNull();
 		assertObject(t.get("foo", Object.class)).isNull();
 
-		assertObject(JsonParser.DEFAULT.parse("{name:'foo',url:'bar',email:'baz','$ref':'qux'}", Contact.class)).json().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
+		assertObject(JsonParser.DEFAULT.parse("{name:'foo',url:'bar',email:'baz','$ref':'qux'}", Contact.class)).asJson().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
 	}
 
 	@Test
@@ -116,7 +116,7 @@ public class Contact_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("name", "foo")
@@ -125,14 +125,14 @@ public class Contact_Test {
 			.set("$ref", "qux")
 			.copy();
 
-		assertObject(t).json().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
+		assertObject(t).asJson().is("{name:'foo',url:'bar',email:'baz','$ref':'qux'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Contact t = new Contact();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("name", "foo")
@@ -140,6 +140,6 @@ public class Contact_Test {
 			.set("email", "baz")
 			.set("$ref", "qux");
 
-		assertObject(t.keySet()).json().is("['email','name','url','$ref']");
+		assertObject(t.keySet()).asJson().is("['email','name','url','$ref']");
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
index c338790..e2ad40c 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java
@@ -72,17 +72,17 @@ public class ExternalDocumentation_Test {
 			.set("url", "bar")
 			.set("$ref", "baz");
 
-		assertObject(t).json().is("{description:'foo',url:'bar','$ref':'baz'}");
+		assertObject(t).asJson().is("{description:'foo',url:'bar','$ref':'baz'}");
 
 		t
 			.set("description", new StringBuilder("foo"))
 			.set("url", new StringBuilder("bar"))
 			.set("$ref", new StringBuilder("baz"));
 
-		assertObject(t).json().is("{description:'foo',url:'bar','$ref':'baz'}");
+		assertObject(t).asJson().is("{description:'foo',url:'bar','$ref':'baz'}");
 
 		assertObject(t.get("description", String.class)).isType(String.class).is("foo");
-		assertObject(t.get("url", URI.class)).isType(URI.class).string().is("bar");
+		assertObject(t.get("url", URI.class)).isType(URI.class).asString().is("bar");
 		assertObject(t.get("$ref", String.class)).isType(String.class).is("baz");
 
 		t.set("null", null).set(null, "null");
@@ -90,7 +90,7 @@ public class ExternalDocumentation_Test {
 		assertObject(t.get(null, Object.class)).isNull();
 		assertObject(t.get("foo", Object.class)).isNull();
 
-		assertObject(JsonParser.DEFAULT.parse("{description:'foo',url:'bar','$ref':'baz'}", ExternalDocumentation.class)).json().is("{description:'foo',url:'bar','$ref':'baz'}");
+		assertObject(JsonParser.DEFAULT.parse("{description:'foo',url:'bar','$ref':'baz'}", ExternalDocumentation.class)).asJson().is("{description:'foo',url:'bar','$ref':'baz'}");
 	}
 
 	@Test
@@ -99,7 +99,7 @@ public class ExternalDocumentation_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("description", "foo")
@@ -107,20 +107,20 @@ public class ExternalDocumentation_Test {
 			.set("$ref", "baz")
 			.copy();
 
-		assertObject(t).json().is("{description:'foo',url:'bar','$ref':'baz'}");
+		assertObject(t).asJson().is("{description:'foo',url:'bar','$ref':'baz'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		ExternalDocumentation t = new ExternalDocumentation();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("description", "foo")
 			.set("url", "bar")
 			.set("$ref", "baz");
 
-		assertObject(t.keySet()).json().is("['description','url','$ref']");
+		assertObject(t.keySet()).asJson().is("['description','url','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
index 1cef3a5..0fa39f4 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java
@@ -78,10 +78,10 @@ public class HeaderInfo_Test {
 		HeaderInfo t = new HeaderInfo();
 
 		t.items(items("foo"));
-		assertObject(t.items()).json().is("{type:'foo'}");
+		assertObject(t.items()).asJson().is("{type:'foo'}");
 
 		t.items("{type:'foo'}");
-		assertObject(t.items()).isType(Items.class).json().is("{type:'foo'}");
+		assertObject(t.items()).isType(Items.class).asJson().is("{type:'foo'}");
 
 		t.items((Items)null);
 		assertObject(t.items()).isNull();
@@ -112,7 +112,7 @@ public class HeaderInfo_Test {
 		assertString(t._default()).is("foo");
 
 		t._default(new StringBuilder("foo"));
-		assertObject(t._default()).isType(StringBuilder.class).string().is("foo");
+		assertObject(t._default()).isType(StringBuilder.class).asString().is("foo");
 
 		t._default(null);
 		assertObject(t._default()).isNull();
@@ -299,31 +299,31 @@ public class HeaderInfo_Test {
 		HeaderInfo t = new HeaderInfo();
 
 		t._enum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t._enum(ASet.of());
-		assertObject(t._enum()).isType(Set.class).json().is("[]");
+		assertObject(t._enum()).isType(Set.class).asJson().is("[]");
 
 		t._enum("foo","bar");
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t._enum(new Object[0]);
-		assertObject(t._enum()).isType(Set.class).json().is("[]");
+		assertObject(t._enum()).isType(Set.class).asJson().is("[]");
 
 		t._enum((Collection<Object>)null);
 		assertObject(t._enum()).isNull();
 
 		t.addEnum(ASet.of("foo","bar"));
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addEnum(ASet.of("baz"));
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 
 		t.addEnum(null);
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 
 		t.addEnum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 	}
 
 	/**
@@ -407,7 +407,7 @@ public class HeaderInfo_Test {
 			.set("uniqueItems", true)
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
+		assertObject(t).asJson().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
 
 		t
 			.set("default", "a")
@@ -431,7 +431,7 @@ public class HeaderInfo_Test {
 			.set("uniqueItems", "true")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
+		assertObject(t).asJson().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
 
 		t
 			.set("default", new StringBuilder("a"))
@@ -455,17 +455,17 @@ public class HeaderInfo_Test {
 			.set("uniqueItems", new StringBuilder("true"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
+		assertObject(t).asJson().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
 
-		assertObject(t.get("default", Object.class)).isType(StringBuilder.class).string().is("a");
-		assertObject(t.get("enum", Object.class)).isType(Set.class).string().is("['b']");
+		assertObject(t.get("default", Object.class)).isType(StringBuilder.class).asString().is("a");
+		assertObject(t.get("enum", Object.class)).isType(Set.class).asString().is("['b']");
 		assertObject(t.get("collectionFormat", Object.class)).isType(String.class).is("c");
 		assertObject(t.get("description", Object.class)).isType(String.class).is("d");
-		assertObject(t.get("example", Object.class)).isType(StringBuilder.class).string().is("e");
+		assertObject(t.get("example", Object.class)).isType(StringBuilder.class).asString().is("e");
 		assertObject(t.get("exclusiveMaximum", Object.class)).isType(Boolean.class).is(true);
 		assertObject(t.get("exclusiveMinimum", Object.class)).isType(Boolean.class).is(true);
 		assertObject(t.get("format", Object.class)).isType(String.class).is("g");
-		assertObject(t.get("items", Object.class)).isType(Items.class).json().is("{type:'h'}");
+		assertObject(t.get("items", Object.class)).isType(Items.class).asJson().is("{type:'h'}");
 		assertObject(t.get("maximum", Object.class)).isType(Float.class).is(123f);
 		assertObject(t.get("maxItems", Object.class)).isType(Integer.class).is(123);
 		assertObject(t.get("maxLength", Object.class)).isType(Integer.class).is(123);
@@ -484,7 +484,7 @@ public class HeaderInfo_Test {
 		assertObject(t.get("foo", Object.class)).isNull();
 
 		String s = "{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}";
-		assertObject(JsonParser.DEFAULT.parse(s, HeaderInfo.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, HeaderInfo.class)).asJson().is(s);
 	}
 
 	@Test
@@ -493,7 +493,7 @@ public class HeaderInfo_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("default", "a")
@@ -518,14 +518,14 @@ public class HeaderInfo_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
+		assertObject(t).asJson().is("{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		HeaderInfo t = new HeaderInfo();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("default", "a")
@@ -549,7 +549,7 @@ public class HeaderInfo_Test {
 			.set("uniqueItems", true)
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['collectionFormat','default','description','enum','example','exclusiveMaximum','exclusiveMinimum','format','items','maximum','maxItems','maxLength','minimum','minItems','minLength','multipleOf','pattern','$ref','type','uniqueItems']");
+		assertObject(t.keySet()).asJson().is("['collectionFormat','default','description','enum','example','exclusiveMaximum','exclusiveMinimum','format','items','maximum','maxItems','maxLength','minimum','minItems','minLength','multipleOf','pattern','$ref','type','uniqueItems']");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
index a498353..45143f2 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java
@@ -75,10 +75,10 @@ public class Info_Test {
 		Info t = new Info();
 
 		t.contact(contact("foo"));
-		assertObject(t.contact()).json().is("{name:'foo'}");
+		assertObject(t.contact()).asJson().is("{name:'foo'}");
 
 		t.contact("{name:'foo'}");
-		assertObject(t.contact()).isType(Contact.class).json().is("{name:'foo'}");
+		assertObject(t.contact()).isType(Contact.class).asJson().is("{name:'foo'}");
 
 		t.contact((String)null);
 		assertObject(t.contact()).isNull();
@@ -92,10 +92,10 @@ public class Info_Test {
 		Info t = new Info();
 
 		t.license(license("foo"));
-		assertObject(t.license()).isType(License.class).json().is("{name:'foo'}");
+		assertObject(t.license()).isType(License.class).asJson().is("{name:'foo'}");
 
 		t.license("{name:'foo'}");
-		assertObject(t.license()).isType(License.class).json().is("{name:'foo'}");
+		assertObject(t.license()).isType(License.class).asJson().is("{name:'foo'}");
 
 		t.license((String)null);
 		assertObject(t.license()).isNull();
@@ -131,7 +131,7 @@ public class Info_Test {
 			.set("version", "f")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
+		assertObject(t).asJson().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
 
 		t
 			.set("contact", "{name:'a'}")
@@ -142,7 +142,7 @@ public class Info_Test {
 			.set("version", "f")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
+		assertObject(t).asJson().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
 
 		t
 			.set("contact", new StringBuilder("{name:'a'}"))
@@ -153,7 +153,7 @@ public class Info_Test {
 			.set("version", new StringBuilder("f"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
+		assertObject(t).asJson().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
 
 		assertString(t.get("contact", String.class)).is("{name:'a'}");
 		assertString(t.get("description", String.class)).is("b");
@@ -177,7 +177,7 @@ public class Info_Test {
 		assertObject(t.get("foo", Object.class)).isNull();
 
 		String s = "{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Info.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Info.class)).asJson().is(s);
 	}
 
 	@Test
@@ -186,7 +186,7 @@ public class Info_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("contact", contact("a"))
@@ -198,14 +198,14 @@ public class Info_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
+		assertObject(t).asJson().is("{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Info t = new Info();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("contact", contact("a"))
@@ -216,6 +216,6 @@ public class Info_Test {
 			.set("version", "f")
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['contact','description','license','termsOfService','title','version','$ref']");
+		assertObject(t.keySet()).asJson().is("['contact','description','license','termsOfService','title','version','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
index ae95ebf..134e765 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java
@@ -65,10 +65,10 @@ public class Items_Test {
 		Items t = new Items();
 
 		t.items(items("foo"));
-		assertObject(t.items()).json().is("{type:'foo'}");
+		assertObject(t.items()).asJson().is("{type:'foo'}");
 
 		t.items("{type:'foo'}");
-		assertObject(t.items()).isType(Items.class).json().is("{type:'foo'}");
+		assertObject(t.items()).isType(Items.class).asJson().is("{type:'foo'}");
 
 		t.items((String)null);
 		assertObject(t.items()).isNull();
@@ -99,7 +99,7 @@ public class Items_Test {
 		assertObject(t._default()).is("foo");
 
 		t._default(new StringBuilder("foo"));
-		assertObject(t._default()).isType(StringBuilder.class).string().is("foo");
+		assertObject(t._default()).isType(StringBuilder.class).asString().is("foo");
 
 		t._default(null);
 		assertObject(t._default()).isNull();
@@ -286,25 +286,25 @@ public class Items_Test {
 		Items t = new Items();
 
 		t._enum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t._enum("foo","baz");
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','baz']");
 
 		t._enum(ASet.of());
-		assertObject(t._enum()).isType(Set.class).json().is("[]");
+		assertObject(t._enum()).isType(Set.class).asJson().is("[]");
 
 		t._enum((Collection<Object>)null);
 		assertObject(t._enum()).isNull();
 
 		t.addEnum(ASet.of("foo","bar"));
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addEnum(ASet.of("baz"));
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 
 		t.addEnum(null);
-		assertObject(t.getEnum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t.getEnum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 	}
 
 	/**
@@ -354,7 +354,7 @@ public class Items_Test {
 			.set("uniqueItems", true)
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		t
 			.set("default", "a")
@@ -376,7 +376,7 @@ public class Items_Test {
 			.set("uniqueItems", "true")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		t
 			.set("default", new StringBuilder("a"))
@@ -398,7 +398,7 @@ public class Items_Test {
 			.set("uniqueItems", new StringBuilder("true"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		assertString(t.get("default", String.class)).is("a");
 		assertString(t.get("enum", String.class)).is("['b']");
@@ -444,7 +444,7 @@ public class Items_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Items.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Items.class)).asJson().is(s);
 	}
 
 	@Test
@@ -453,7 +453,7 @@ public class Items_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("default", "a")
@@ -476,14 +476,14 @@ public class Items_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Items t = new Items();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("collectionFormat", "c")
@@ -505,7 +505,7 @@ public class Items_Test {
 			.set("type", "j")
 			.set("uniqueItems", true);
 
-		assertObject(t.keySet()).json().is(
+		assertObject(t.keySet()).asJson().is(
 			"['collectionFormat','default','enum','exclusiveMaximum','exclusiveMinimum','format','items','maximum','maxItems',"
 			+ "'maxLength','minimum','minItems','minLength','multipleOf','pattern','$ref','type','uniqueItems']"
 		);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
index 3bb102d..653fc32 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java
@@ -49,13 +49,13 @@ public class License_Test {
 		License t = new License();
 
 		t.url(URI.create("foo"));
-		assertObject(t.url()).isType(URI.class).string().is("foo");
+		assertObject(t.url()).isType(URI.class).asString().is("foo");
 
 		t.url("bar");
-		assertObject(t.url()).isType(URI.class).string().is("bar");
+		assertObject(t.url()).isType(URI.class).asString().is("bar");
 
 		t.url(new URL("http://baz"));
-		assertObject(t.url()).isType(URI.class).string().is("http://baz");
+		assertObject(t.url()).isType(URI.class).asString().is("http://baz");
 
 		t.url((String)null);
 		assertObject(t.url()).isNull();
@@ -73,21 +73,21 @@ public class License_Test {
 			.set("url", URI.create("b"))
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'a',url:'b','$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',url:'b','$ref':'ref'}");
 
 		t
 			.set("name", "a")
 			.set("url", "b")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'a',url:'b','$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',url:'b','$ref':'ref'}");
 
 		t
 			.set("name", new StringBuilder("a"))
 			.set("url", new StringBuilder("b"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{name:'a',url:'b','$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',url:'b','$ref':'ref'}");
 
 		assertString(t.get("name", String.class)).is("a");
 		assertString(t.get("url", String.class)).is("b");
@@ -103,7 +103,7 @@ public class License_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{name:'a',url:'b','$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, License.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, License.class)).asJson().is(s);
 	}
 
 	@Test
@@ -112,7 +112,7 @@ public class License_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("name", "a")
@@ -120,20 +120,20 @@ public class License_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{name:'a',url:'b','$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',url:'b','$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		License t = new License();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("name", "a")
 			.set("url", URI.create("b"))
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['name','url','$ref']");
+		assertObject(t.keySet()).asJson().is("['name','url','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
index 47a1a52..5f79e82 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java
@@ -38,25 +38,25 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.tags(ASet.of("foo","bar"));
-		assertObject(t.tags()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.tags()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.tags("bar","baz");
-		assertObject(t.tags()).isType(Set.class).json().is("['bar','baz']");
+		assertObject(t.tags()).isType(Set.class).asJson().is("['bar','baz']");
 
 		t.tags(ASet.of());
-		assertObject(t.tags()).isType(Set.class).json().is("[]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[]");
 
 		t.tags((Collection<String>)null);
 		assertObject(t.tags()).isNull();
 
 		t.addTags(ASet.of("foo","bar"));
-		assertObject(t.tags()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.tags()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addTags(ASet.of());
-		assertObject(t.tags()).isType(Set.class).json().is("['foo','bar']");;
+		assertObject(t.tags()).isType(Set.class).asJson().is("['foo','bar']");;
 
 		t.addTags(null);
-		assertObject(t.tags()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.tags()).isType(Set.class).asJson().is("['foo','bar']");
 
 	}
 
@@ -96,10 +96,10 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.externalDocs(externalDocumentation("foo"));
-		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).asJson().is("{url:'foo'}");
 
 		t.externalDocs("{url:'bar'}");
-		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).json().is("{url:'bar'}");
+		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).asJson().is("{url:'bar'}");
 
 		t.externalDocs((String)null);
 		assertObject(t.externalDocs()).isNull();
@@ -127,22 +127,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.consumes(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.consumes(ASet.of());
-		assertObject(t.consumes()).isType(Set.class).json().is("[]");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("[]");
 
 		t.consumes((Collection<MediaType>)null);
 		assertObject(t.consumes()).isNull();
 
 		t.addConsumes(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addConsumes(ASet.of());
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addConsumes(null);
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 	}
 
 	/**
@@ -153,22 +153,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.produces(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.produces(ASet.of());
-		assertObject(t.produces()).isType(Set.class).json().is("[]");
+		assertObject(t.produces()).isType(Set.class).asJson().is("[]");
 
 		t.produces((Collection<MediaType>)null);
 		assertObject(t.produces()).isNull();
 
 		t.addProduces(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addProduces(ASet.of());
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addProduces(null);
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 	}
 
 	/**
@@ -179,22 +179,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.parameters(ASet.of(parameterInfo("foo","bar")));
-		assertObject(t.parameters()).isType(List.class).json().is("[{'in':'foo',name:'bar'}]");
+		assertObject(t.parameters()).isType(List.class).asJson().is("[{'in':'foo',name:'bar'}]");
 
 		t.parameters(ASet.of());
-		assertObject(t.parameters()).isType(List.class).json().is("[]");
+		assertObject(t.parameters()).isType(List.class).asJson().is("[]");
 
 		t.parameters((Collection<ParameterInfo>)null);
 		assertObject(t.parameters()).isNull();
 
 		t.addParameters(ASet.of(parameterInfo("foo","bar")));
-		assertObject(t.parameters()).isType(List.class).json().is("[{'in':'foo',name:'bar'}]");;
+		assertObject(t.parameters()).isType(List.class).asJson().is("[{'in':'foo',name:'bar'}]");;
 
 		t.addParameters(ASet.of());
-		assertObject(t.parameters()).isType(List.class).json().is("[{'in':'foo',name:'bar'}]");
+		assertObject(t.parameters()).isType(List.class).asJson().is("[{'in':'foo',name:'bar'}]");
 
 		t.addParameters(null);
-		assertObject(t.parameters()).isType(List.class).json().is("[{'in':'foo',name:'bar'}]");
+		assertObject(t.parameters()).isType(List.class).asJson().is("[{'in':'foo',name:'bar'}]");
 	}
 
 	/**
@@ -205,22 +205,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.responses(AMap.of("123",responseInfo("bar")));
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.responses(AMap.create());
-		assertObject(t.responses()).isType(Map.class).json().is("{}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{}");
 
 		t.responses((Map<String,ResponseInfo>)null);
 		assertObject(t.responses()).isNull();
 
 		t.addResponses(AMap.of("123",responseInfo("bar")));
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.addResponses(AMap.create());
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.addResponses(null);
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 	}
 
 	/**
@@ -231,22 +231,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.schemes(ASet.of("foo"));
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo']");
 
 		t.schemes(ASet.of());
-		assertObject(t.schemes()).isType(Set.class).json().is("[]");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("[]");
 
 		t.schemes((Set<String>)null);
 		assertObject(t.schemes()).isNull();
 
 		t.addSchemes(ASet.of("foo"));
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo']");
 
 		t.addSchemes(ASet.of());
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo']");
 
 		t.addSchemes(null);
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo']");
 	}
 
 	/**
@@ -257,22 +257,22 @@ public class Operation_Test {
 		Operation t = new Operation();
 
 		t.security(AList.of(AMap.of("foo",AList.of("bar"))));
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.security(AList.of());
-		assertObject(t.security()).isType(List.class).json().is("[]");
+		assertObject(t.security()).isType(List.class).asJson().is("[]");
 
 		t.security((List<Map<String,List<String>>>)null);
 		assertObject(t.security()).isNull();
 
 		t.addSecurity(ASet.of(AMap.of("foo",AList.of("bar"))));
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.addSecurity(ASet.of());
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.addSecurity(null);
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 	}
 
 	/**
@@ -314,7 +314,7 @@ public class Operation_Test {
 			.set("tags", ASet.of("k"))
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
 
 		t
 			.set("consumes", "['text/a']")
@@ -331,7 +331,7 @@ public class Operation_Test {
 			.set("tags", "['k']")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
 
 		t
 			.set("consumes", new StringBuilder("['text/a']"))
@@ -348,7 +348,7 @@ public class Operation_Test {
 			.set("tags", new StringBuilder("['k']"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
 
 		assertString(t.get("consumes", String.class)).is("['text/a']");
 		assertString(t.get("deprecated", String.class)).is("true");
@@ -389,7 +389,7 @@ public class Operation_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Operation.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Operation.class)).asJson().is(s);
 	}
 
 	@Test
@@ -398,7 +398,7 @@ public class Operation_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("consumes", ASet.of(MediaType.of("text/a")))
@@ -416,14 +416,14 @@ public class Operation_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Operation t = new Operation();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("consumes", ASet.of(MediaType.of("text/a")))
@@ -440,7 +440,7 @@ public class Operation_Test {
 			.set("tags", ASet.of("k"))
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is(
+		assertObject(t.keySet()).asJson().is(
 			"['consumes','deprecated','description','externalDocs','operationId','parameters','produces','responses','schemes','security','summary','tags','$ref']"
 		);
 	}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
index d26eb0c..e33eb15 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java
@@ -96,10 +96,10 @@ public class ParameterInfo_Test {
 		ParameterInfo t = new ParameterInfo();
 
 		t.schema(schemaInfo().title("foo"));
-		assertObject(t.schema()).json().is("{title:'foo'}");
+		assertObject(t.schema()).asJson().is("{title:'foo'}");
 
 		t.schema("{title:'foo'}");
-		assertObject(t.schema()).isType(SchemaInfo.class).json().is("{title:'foo'}");
+		assertObject(t.schema()).isType(SchemaInfo.class).asJson().is("{title:'foo'}");
 
 		t.schema((String)null);
 		assertObject(t.schema()).isNull();
@@ -158,10 +158,10 @@ public class ParameterInfo_Test {
 		ParameterInfo t = new ParameterInfo();
 
 		t.items(items("foo"));
-		assertObject(t.items()).json().is("{type:'foo'}");
+		assertObject(t.items()).asJson().is("{type:'foo'}");
 
 		t.items("{type:'foo'}");
-		assertObject(t.items()).isType(Items.class).json().is("{type:'foo'}");
+		assertObject(t.items()).isType(Items.class).asJson().is("{type:'foo'}");
 
 		t.items((String)null);
 		assertObject(t.items()).isNull();
@@ -192,7 +192,7 @@ public class ParameterInfo_Test {
 		assertString(t._default()).is("foo");
 
 		t._default(new StringBuilder("foo"));
-		assertObject(t._default()).isType(StringBuilder.class).string().is("foo");
+		assertObject(t._default()).isType(StringBuilder.class).asString().is("foo");
 
 		t._default(null);
 		assertObject(t._default()).isNull();
@@ -379,22 +379,22 @@ public class ParameterInfo_Test {
 		ParameterInfo t = new ParameterInfo();
 
 		t._enum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t._enum(ASet.of());
-		assertObject(t._enum()).isType(Set.class).json().is("[]");
+		assertObject(t._enum()).isType(Set.class).asJson().is("[]");
 
 		t._enum((Collection<Object>)null);
 		assertObject(t._enum()).isNull();
 
 		t.addEnum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addEnum(ASet.of("baz"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 
 		t.addEnum(null);
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 	}
 
 	/**
@@ -450,7 +450,7 @@ public class ParameterInfo_Test {
 			.set("uniqueItems", true)
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		t
 			.set("default", "a")
@@ -478,7 +478,7 @@ public class ParameterInfo_Test {
 			.set("uniqueItems", "true")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		t
 			.set("default", new StringBuilder("a"))
@@ -506,7 +506,7 @@ public class ParameterInfo_Test {
 			.set("uniqueItems", new StringBuilder("true"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 
 		assertString(t.get("default", String.class)).is("a");
 		assertString(t.get("enum", String.class)).is("['b']");
@@ -564,7 +564,7 @@ public class ParameterInfo_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, ParameterInfo.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, ParameterInfo.class)).asJson().is(s);
 	}
 
 	@Test
@@ -573,7 +573,7 @@ public class ParameterInfo_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("default", "a")
@@ -602,14 +602,14 @@ public class ParameterInfo_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
+		assertObject(t).asJson().is("{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		ParameterInfo t = new ParameterInfo();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("allowEmptyValue", true)
@@ -637,7 +637,7 @@ public class ParameterInfo_Test {
 			.set("uniqueItems", true)
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is(
+		assertObject(t.keySet()).asJson().is(
 			"['allowEmptyValue','collectionFormat','default','description','enum','exclusiveMaximum','exclusiveMinimum',"
 			+ "'format','in','items','maximum','maxItems','maxLength','minimum','minItems','minLength','multipleOf','name',"
 			+ "'pattern','required','schema','type','uniqueItems','$ref']"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
index bcd3954..eee69df 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java
@@ -51,10 +51,10 @@ public class ResponseInfo_Test {
 		ResponseInfo t = new ResponseInfo();
 
 		t.schema(schemaInfo().title("foo"));
-		assertObject(t.schema()).isType(SchemaInfo.class).json().is("{title:'foo'}");
+		assertObject(t.schema()).isType(SchemaInfo.class).asJson().is("{title:'foo'}");
 
 		t.schema("{title:'foo'}");
-		assertObject(t.schema()).isType(SchemaInfo.class).json().is("{title:'foo'}");
+		assertObject(t.schema()).isType(SchemaInfo.class).asJson().is("{title:'foo'}");
 
 		t.schema((String)null);
 		assertObject(t.schema()).isNull();
@@ -68,25 +68,25 @@ public class ResponseInfo_Test {
 		ResponseInfo t = new ResponseInfo();
 
 		t.headers(AMap.of("foo",headerInfo("bar")));
-		assertObject(t.headers()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.headers()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 		assertObject(t.headers().get().get("foo")).isType(HeaderInfo.class);
 
 		t.headers(AMap.create());
-		assertObject(t.headers()).isType(Map.class).json().is("{}");
+		assertObject(t.headers()).isType(Map.class).asJson().is("{}");
 
 		t.headers((Map<String,HeaderInfo>)null);
 		assertObject(t.headers()).isNull();
 
 		t.addHeaders(AMap.of("foo",headerInfo("bar")));
-		assertObject(t.headers()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.headers()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 		assertObject(t.headers().get().get("foo")).isType(HeaderInfo.class);
 
 		t.addHeaders(AMap.create());
-		assertObject(t.headers()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.headers()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 		assertObject(t.headers().get().get("foo")).isType(HeaderInfo.class);
 
 		t.addHeaders(null);
-		assertObject(t.headers()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.headers()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 		assertObject(t.headers().get().get("foo")).isType(HeaderInfo.class);
 	}
 
@@ -98,29 +98,29 @@ public class ResponseInfo_Test {
 		ResponseInfo t = new ResponseInfo();
 
 		t.examples(AMap.of("foo","bar","baz",AList.of("qux")));
-		assertObject(t.examples()).isType(Map.class).json().is("{foo:'bar',baz:['qux']}");
+		assertObject(t.examples()).isType(Map.class).asJson().is("{foo:'bar',baz:['qux']}");
 
 		t.examples(AMap.create());
-		assertObject(t.examples()).isType(Map.class).json().is("{}");
+		assertObject(t.examples()).isType(Map.class).asJson().is("{}");
 
 		t.examples((Map<String,Object>)null);
 		assertObject(t.examples()).isNull();
 
 		t.addExamples(AMap.of("foo","bar","baz",AList.of("qux")));
-		assertObject(t.examples()).isType(Map.class).json().is("{foo:'bar',baz:['qux']}");
+		assertObject(t.examples()).isType(Map.class).asJson().is("{foo:'bar',baz:['qux']}");
 
 		t.addExamples(AMap.create());
-		assertObject(t.examples()).isType(Map.class).json().is("{foo:'bar',baz:['qux']}");
+		assertObject(t.examples()).isType(Map.class).asJson().is("{foo:'bar',baz:['qux']}");
 
 		t.addExamples(null);
-		assertObject(t.examples()).isType(Map.class).json().is("{foo:'bar',baz:['qux']}");
+		assertObject(t.examples()).isType(Map.class).asJson().is("{foo:'bar',baz:['qux']}");
 
 		t.examples(AMap.create());
 		t.example("text/a", "a");
 		t.example("text/b", null);
 		t.example(null, "c");
 
-		assertObject(t.examples()).json().is("{'text/a':'a','text/b':null,null:'c'}");
+		assertObject(t.examples()).asJson().is("{'text/a':'a','text/b':null,null:'c'}");
 	}
 
 	/**
@@ -137,7 +137,7 @@ public class ResponseInfo_Test {
 			.set("schema", schemaInfo().type("d"))
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
+		assertObject(t).asJson().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
 
 		t
 			.set("description", "a")
@@ -146,7 +146,7 @@ public class ResponseInfo_Test {
 			.set("schema", "{type:'d'}")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
+		assertObject(t).asJson().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
 
 		t
 			.set("description", new StringBuilder("a"))
@@ -155,7 +155,7 @@ public class ResponseInfo_Test {
 			.set("schema", new StringBuilder("{type:'d'}"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
+		assertObject(t).asJson().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
 
 		assertString(t.get("description", String.class)).is("a");
 		assertString(t.get("examples", String.class)).is("{foo:'bar',baz:['qux']}");
@@ -176,7 +176,7 @@ public class ResponseInfo_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, ResponseInfo.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, ResponseInfo.class)).asJson().is(s);
 	}
 
 	@Test
@@ -185,7 +185,7 @@ public class ResponseInfo_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("description", "a")
@@ -195,14 +195,14 @@ public class ResponseInfo_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
+		assertObject(t).asJson().is("{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		ResponseInfo t = new ResponseInfo();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("description", "a")
@@ -211,6 +211,6 @@ public class ResponseInfo_Test {
 			.set("schema", schemaInfo().type("d"))
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['description','examples','headers','schema','$ref']");
+		assertObject(t.keySet()).asJson().is("['description','examples','headers','schema','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
index 8ccacfc..7bd016d 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SchemaInfo_Test.java
@@ -82,7 +82,7 @@ public class SchemaInfo_Test {
 		assertString(t._default()).is("foo");
 
 		t._default(new StringBuilder("foo"));
-		assertObject(t._default()).isType(StringBuilder.class).string().is("foo");
+		assertObject(t._default()).isType(StringBuilder.class).asString().is("foo");
 
 		t._default(null);
 		assertObject(t._default()).isNull();
@@ -323,7 +323,7 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.required("['x']");
-		assertObject(t.required()).isType(Set.class).json().is("['x']");
+		assertObject(t.required()).isType(Set.class).asJson().is("['x']");
 
 		t.setRequired(null);
 		assertObject(t.required()).isNull();
@@ -337,22 +337,22 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t._enum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t._enum(ASet.of());
-		assertObject(t._enum()).isType(Set.class).json().is("[]");
+		assertObject(t._enum()).isType(Set.class).asJson().is("[]");
 
 		t._enum((Collection<Object>)null);
 		assertObject(t._enum()).isNull();
 
 		t.addEnum(ASet.of("foo","bar"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addEnum(ASet.of("baz"));
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 
 		t.addEnum(null);
-		assertObject(t._enum()).isType(Set.class).json().is("['foo','bar','baz']");
+		assertObject(t._enum()).isType(Set.class).asJson().is("['foo','bar','baz']");
 	}
 
 	/**
@@ -377,10 +377,10 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.items(items("foo"));
-		assertObject(t.items()).json().is("{type:'foo'}");
+		assertObject(t.items()).asJson().is("{type:'foo'}");
 
 		t.items("{type:'foo'}");
-		assertObject(t.items()).isType(Items.class).json().is("{type:'foo'}");
+		assertObject(t.items()).isType(Items.class).asJson().is("{type:'foo'}");
 
 		t.items((String)null);
 		assertObject(t.items()).isNull();
@@ -394,22 +394,22 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.allOf(ASet.of("foo","bar"));
-		assertObject(t.allOf()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.allOf()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.allOf(ASet.of());
-		assertObject(t.allOf()).isType(Set.class).json().is("[]");
+		assertObject(t.allOf()).isType(Set.class).asJson().is("[]");
 
 		t.allOf((Collection<Object>)null);
 		assertObject(t.allOf()).isNull();
 
 		t.addAllOf(ASet.of("foo","bar"));
-		assertObject(t.allOf()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.allOf()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addAllOf(ASet.of());
-		assertObject(t.allOf()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.allOf()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addAllOf(null);
-		assertObject(t.allOf()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.allOf()).isType(Set.class).asJson().is("['foo','bar']");
 	}
 
 	/**
@@ -420,22 +420,22 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.properties(AMap.of("foo",new SchemaInfo().type("foo")));
-		assertObject(t.properties()).isType(Map.class).json().is("{foo:{type:'foo'}}");
+		assertObject(t.properties()).isType(Map.class).asJson().is("{foo:{type:'foo'}}");
 
 		t.properties(AMap.create());
-		assertObject(t.properties()).isType(Map.class).json().is("{}");
+		assertObject(t.properties()).isType(Map.class).asJson().is("{}");
 
 		t.properties((Map<String,SchemaInfo>)null);
 		assertObject(t.properties()).isNull();
 
 		t.addProperties(AMap.of("foo", new SchemaInfo().type("foo")));
-		assertObject(t.properties()).isType(Map.class).json().is("{foo:{type:'foo'}}");
+		assertObject(t.properties()).isType(Map.class).asJson().is("{foo:{type:'foo'}}");
 
 		t.addProperties(AMap.create());
-		assertObject(t.properties()).isType(Map.class).json().is("{foo:{type:'foo'}}");
+		assertObject(t.properties()).isType(Map.class).asJson().is("{foo:{type:'foo'}}");
 
 		t.addProperties(null);
-		assertObject(t.properties()).isType(Map.class).json().is("{foo:{type:'foo'}}");
+		assertObject(t.properties()).isType(Map.class).asJson().is("{foo:{type:'foo'}}");
 	}
 
 	/**
@@ -446,10 +446,10 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.additionalProperties(new SchemaInfo().type("foo"));
-		assertObject(t.additionalProperties()).isType(SchemaInfo.class).json().is("{type:'foo'}");
+		assertObject(t.additionalProperties()).isType(SchemaInfo.class).asJson().is("{type:'foo'}");
 
 		t.additionalProperties(new SchemaInfo());
-		assertObject(t.additionalProperties()).isType(SchemaInfo.class).json().is("{}");
+		assertObject(t.additionalProperties()).isType(SchemaInfo.class).asJson().is("{}");
 
 		t.additionalProperties((SchemaInfo)null);
 		assertObject(t.additionalProperties()).isNull();
@@ -494,10 +494,10 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.xml(xml().name("foo"));
-		assertObject(t.xml()).json().is("{name:'foo'}");
+		assertObject(t.xml()).asJson().is("{name:'foo'}");
 
 		t.xml("{name:'foo'}");
-		assertObject(t.xml()).isType(Xml.class).json().is("{name:'foo'}");
+		assertObject(t.xml()).isType(Xml.class).asJson().is("{name:'foo'}");
 
 		t.xml((String)null);
 		assertObject(t.xml()).isNull();
@@ -511,10 +511,10 @@ public class SchemaInfo_Test {
 		SchemaInfo t = new SchemaInfo();
 
 		t.externalDocs(externalDocumentation("foo"));
-		assertObject(t.externalDocs()).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).asJson().is("{url:'foo'}");
 
 		t.externalDocs("{url:'foo'}");
-		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).asJson().is("{url:'foo'}");
 
 		t.externalDocs((String)null);
 		assertObject(t.externalDocs()).isNull();
@@ -576,7 +576,7 @@ public class SchemaInfo_Test {
 			.set("xml", xml().name("o"))
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g',' [...]
+		assertObject(t).asJson().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g' [...]
 
 		t
 			.set("default", "a")
@@ -610,7 +610,7 @@ public class SchemaInfo_Test {
 			.set("xml", "{name:'o'}")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g',' [...]
+		assertObject(t).asJson().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g' [...]
 
 		t
 			.set("default", new StringBuilder("a"))
@@ -644,7 +644,7 @@ public class SchemaInfo_Test {
 			.set("xml", new StringBuilder("{name:'o'}"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g',' [...]
+		assertObject(t).asJson().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g' [...]
 
 		assertString(t.get("default", String.class)).is("a");
 		assertString(t.get("enum", String.class)).is("['b']");
@@ -714,7 +714,7 @@ public class SchemaInfo_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g','$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, SchemaInfo.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, SchemaInfo.class)).asJson().is(s);
 	}
 
 	@Test
@@ -723,7 +723,7 @@ public class SchemaInfo_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("default", "a")
@@ -758,14 +758,14 @@ public class SchemaInfo_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g',' [...]
+		assertObject(t).asJson().is("{format:'i',title:'m',description:'e','default':'a',multipleOf:123.0,maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'k',maxItems:123,minItems:123,uniqueItems:true,maxProperties:123,minProperties:123,required:['x'],'enum':['b'],type:'n',items:{type:'j'},allOf:['d'],properties:{l:{l1:1}},additionalProperties:{c:['c1']},discriminator:'f',readOnly:true,xml:{name:'o'},externalDocs:{url:'h'},example:'g' [...]
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		SchemaInfo t = new SchemaInfo();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("additionalProperties", AMap.of("c",AList.of("c1")))
@@ -799,7 +799,7 @@ public class SchemaInfo_Test {
 			.set("uniqueItems", true)
 			.set("xml", xml().name("o"));
 
-		assertObject(t.keySet()).json().is(
+		assertObject(t.keySet()).asJson().is(
 			"['additionalProperties','allOf','default','description','discriminator','enum','example','exclusiveMaximum','exclusiveMinimum',"
 			+ "'externalDocs','format','items','maximum','maxItems','maxLength','maxProperties','minimum','minItems','minLength','minProperties',"
 			+ "'multipleOf','pattern','properties','readOnly','$ref','required','title','type','uniqueItems','xml']"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
index b99b513..b75a0dc 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java
@@ -134,22 +134,22 @@ public class SecurityScheme_Test {
 		SecurityScheme t = new SecurityScheme();
 
 		t.scopes(AMap.of("foo","bar"));
-		assertObject(t.scopes()).isType(Map.class).json().is("{foo:'bar'}");
+		assertObject(t.scopes()).isType(Map.class).asJson().is("{foo:'bar'}");
 
 		t.scopes(AMap.create());
-		assertObject(t.scopes()).isType(Map.class).json().is("{}");
+		assertObject(t.scopes()).isType(Map.class).asJson().is("{}");
 
 		t.scopes((Map<String,String>)null);
 		assertObject(t.scopes()).isNull();
 
 		t.addScopes(AMap.of("foo","bar"));
-		assertObject(t.scopes()).isType(Map.class).json().is("{foo:'bar'}");
+		assertObject(t.scopes()).isType(Map.class).asJson().is("{foo:'bar'}");
 
 		t.addScopes(AMap.create());
-		assertObject(t.scopes()).isType(Map.class).json().is("{foo:'bar'}");
+		assertObject(t.scopes()).isType(Map.class).asJson().is("{foo:'bar'}");
 
 		t.addScopes(null);
-		assertObject(t.scopes()).isType(Map.class).json().is("{foo:'bar'}");
+		assertObject(t.scopes()).isType(Map.class).asJson().is("{foo:'bar'}");
 	}
 
 	/**
@@ -170,7 +170,7 @@ public class SecurityScheme_Test {
 			.set("type", "g")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
 
 		t
 			.set("authorizationUrl", "a")
@@ -183,7 +183,7 @@ public class SecurityScheme_Test {
 			.set("type", "g")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
 
 		t
 			.set("authorizationUrl", new StringBuilder("a"))
@@ -196,7 +196,7 @@ public class SecurityScheme_Test {
 			.set("type", new StringBuilder("g"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
 
 		assertString(t.get("authorizationUrl", String.class)).is("a");
 		assertString(t.get("description", String.class)).is("b");
@@ -224,7 +224,7 @@ public class SecurityScheme_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, SecurityScheme.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, SecurityScheme.class)).asJson().is(s);
 	}
 
 	@Test
@@ -233,7 +233,7 @@ public class SecurityScheme_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("authorizationUrl", "a")
@@ -247,14 +247,14 @@ public class SecurityScheme_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		SecurityScheme t = new SecurityScheme();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("authorizationUrl", "a")
@@ -267,6 +267,6 @@ public class SecurityScheme_Test {
 			.set("type", "g")
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['authorizationUrl','description','flow','in','name','scopes','tokenUrl','type','$ref']");
+		assertObject(t.keySet()).asJson().is("['authorizationUrl','description','flow','in','name','scopes','tokenUrl','type','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilder_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilder_Test.java
index 974d7eb..0bb235f 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilder_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/SwaggerBuilder_Test.java
@@ -27,138 +27,138 @@ public class SwaggerBuilder_Test {
 	@Test
 	public void a01_contact() {
 		Contact t = contact();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = contact("foo");
-		assertObject(t).json().is("{name:'foo'}");
+		assertObject(t).asJson().is("{name:'foo'}");
 
 		t = contact("foo", "bar", "baz");
-		assertObject(t).json().is("{name:'foo',url:'bar',email:'baz'}");
+		assertObject(t).asJson().is("{name:'foo',url:'bar',email:'baz'}");
 	}
 
 	@Test
 	public void a02_externalDocumentation() {
 		ExternalDocumentation t = externalDocumentation();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = externalDocumentation("foo");
-		assertObject(t).json().is("{url:'foo'}");
+		assertObject(t).asJson().is("{url:'foo'}");
 
 		t = externalDocumentation("foo", "bar");
-		assertObject(t).json().is("{description:'bar',url:'foo'}");
+		assertObject(t).asJson().is("{description:'bar',url:'foo'}");
 	}
 
 	@Test
 	public void a03_headerInfo() {
 		HeaderInfo t = headerInfo();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = headerInfo("foo");
-		assertObject(t).json().is("{type:'foo'}");
+		assertObject(t).asJson().is("{type:'foo'}");
 
 		t = headerInfoStrict("string");
-		assertObject(t).json().is("{type:'string'}");
+		assertObject(t).asJson().is("{type:'string'}");
 		assertThrown(()->headerInfoStrict("foo")).is("Invalid value passed in to setType(String).  Value='foo', valid values=['string','number','integer','boolean','array']");
 	}
 
 	@Test
 	public void a04_info() {
 		Info t = info();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = info("foo", "bar");
-		assertObject(t).json().is("{title:'foo',version:'bar'}");
+		assertObject(t).asJson().is("{title:'foo',version:'bar'}");
 	}
 
 	@Test
 	public void a05_items() {
 		Items t = items();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = items("foo");
-		assertObject(t).json().is("{type:'foo'}");
+		assertObject(t).asJson().is("{type:'foo'}");
 
 		t = itemsStrict("string");
-		assertObject(t).json().is("{type:'string'}");
+		assertObject(t).asJson().is("{type:'string'}");
 		assertThrown(()->itemsStrict("foo")).is("Invalid value passed in to setType(String).  Value='foo', valid values=['string','number','integer','boolean','array']");
 	}
 
 	@Test
 	public void a06_license() {
 		License t = license();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = license("foo");
-		assertObject(t).json().is("{name:'foo'}");
+		assertObject(t).asJson().is("{name:'foo'}");
 	}
 
 	@Test
 	public void a07_operation() {
 		Operation t = operation();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 	}
 
 	@Test
 	public void a08_parameterInfo() {
 		ParameterInfo t = parameterInfo();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = parameterInfo("foo", "bar");
-		assertObject(t).json().is("{'in':'foo',name:'bar'}");
+		assertObject(t).asJson().is("{'in':'foo',name:'bar'}");
 
 		t = parameterInfoStrict("query", "bar");
-		assertObject(t).json().is("{'in':'query',name:'bar'}");
+		assertObject(t).asJson().is("{'in':'query',name:'bar'}");
 		assertThrown(()->parameterInfoStrict("foo", "bar")).is("Invalid value passed in to setIn(String).  Value='foo', valid values=['query','header','path','formData','body']");
 	}
 
 	@Test
 	public void a09_responseInfo() {
 		ResponseInfo t = responseInfo();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = responseInfo("foo");
-		assertObject(t).json().is("{description:'foo'}");
+		assertObject(t).asJson().is("{description:'foo'}");
 	}
 
 	@Test
 	public void a10_schemaInfo() {
 		SchemaInfo t = schemaInfo();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 	}
 
 	@Test
 	public void a11_securityScheme() {
 		SecurityScheme t = securityScheme();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = securityScheme("foo");
-		assertObject(t).json().is("{type:'foo'}");
+		assertObject(t).asJson().is("{type:'foo'}");
 
 		t = securityScheme("foo");
-		assertObject(t).json().is("{type:'foo'}");
+		assertObject(t).asJson().is("{type:'foo'}");
 	}
 
 	@Test
 	public void a12_swagger() {
 		Swagger t = swagger();
-		assertObject(t).json().is("{swagger:'2.0'}");
+		assertObject(t).asJson().is("{swagger:'2.0'}");
 
 		t = swagger(info());
-		assertObject(t).json().is("{swagger:'2.0',info:{}}");
+		assertObject(t).asJson().is("{swagger:'2.0',info:{}}");
 	}
 
 	@Test
 	public void a13_tag() {
 		Tag t = tag();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t = tag("foo");
-		assertObject(t).json().is("{name:'foo'}");
+		assertObject(t).asJson().is("{name:'foo'}");
 	}
 
 	@Test
 	public void a14_xml() {
 		Xml t = xml();
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
index ecd7148..4de8d32 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Swagger_Test.java
@@ -52,10 +52,10 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.info(info("foo", "bar"));
-		assertObject(t.info()).json().is("{title:'foo',version:'bar'}");
+		assertObject(t.info()).asJson().is("{title:'foo',version:'bar'}");
 
 		t.info("{title:'foo',version:'bar'}");
-		assertObject(t.info()).isType(Info.class).json().is("{title:'foo',version:'bar'}");
+		assertObject(t.info()).isType(Info.class).asJson().is("{title:'foo',version:'bar'}");
 
 		t.info((String)null);
 		assertObject(t.info()).isNull();
@@ -97,22 +97,22 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.schemes(ASet.of("foo","bar"));
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.schemes(ASet.of());
-		assertObject(t.schemes()).isType(Set.class).json().is("[]");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("[]");
 
 		t.schemes((Collection<String>)null);
 		assertObject(t.schemes()).isNull();
 
 		t.addSchemes(ASet.of("foo","bar"));
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addSchemes(ASet.of());
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo','bar']");
 
 		t.addSchemes(null);
-		assertObject(t.schemes()).isType(Set.class).json().is("['foo','bar']");
+		assertObject(t.schemes()).isType(Set.class).asJson().is("['foo','bar']");
 	}
 
 	/**
@@ -123,22 +123,22 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.consumes(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.consumes(ASet.of());
-		assertObject(t.consumes()).isType(Set.class).json().is("[]");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("[]");
 
 		t.consumes((Collection<MediaType>)null);
 		assertObject(t.consumes()).isNull();
 
 		t.addConsumes(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addConsumes(ASet.of());
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addConsumes(null);
-		assertObject(t.consumes()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.consumes()).isType(Set.class).asJson().is("['text/foo']");
 	}
 
 	/**
@@ -149,22 +149,22 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.produces(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.produces(ASet.of());
-		assertObject(t.produces()).isType(Set.class).json().is("[]");
+		assertObject(t.produces()).isType(Set.class).asJson().is("[]");
 
 		t.produces((Collection<MediaType>)null);
 		assertObject(t.produces()).isNull();
 
 		t.addProduces(ASet.of(MediaType.of("text/foo")));
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addProduces(ASet.of());
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 
 		t.addProduces(null);
-		assertObject(t.produces()).isType(Set.class).json().is("['text/foo']");
+		assertObject(t.produces()).isType(Set.class).asJson().is("['text/foo']");
 	}
 
 	/**
@@ -175,28 +175,28 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.paths(AMap.of("foo", new OperationMap().append("bar",operation().summary("baz"))));
-		assertObject(t.paths()).isType(Map.class).json().is("{foo:{bar:{summary:'baz'}}}");
+		assertObject(t.paths()).isType(Map.class).asJson().is("{foo:{bar:{summary:'baz'}}}");
 
 		t.paths(AMap.create());
-		assertObject(t.paths()).isType(Map.class).json().is("{}");
+		assertObject(t.paths()).isType(Map.class).asJson().is("{}");
 
 		t.paths((Map<String,OperationMap>)null);
 		assertObject(t.paths()).isNull();
 
 		t.addPaths(AMap.of("foo",new OperationMap().append("bar",operation().summary("baz"))));
-		assertObject(t.paths()).isType(Map.class).json().is("{foo:{bar:{summary:'baz'}}}");
+		assertObject(t.paths()).isType(Map.class).asJson().is("{foo:{bar:{summary:'baz'}}}");
 
 		t.addPaths(AMap.create());
-		assertObject(t.paths()).isType(Map.class).json().is("{foo:{bar:{summary:'baz'}}}");
+		assertObject(t.paths()).isType(Map.class).asJson().is("{foo:{bar:{summary:'baz'}}}");
 
 		t.addPaths(null);
-		assertObject(t.paths()).isType(Map.class).json().is("{foo:{bar:{summary:'baz'}}}");
+		assertObject(t.paths()).isType(Map.class).asJson().is("{foo:{bar:{summary:'baz'}}}");
 
 		t.setPaths(null);
 		t.path("a", "a1", operation().description("a2"));
 		t.path("b", null, null);
 
-		assertObject(t.paths()).json().is("{a:{a1:{description:'a2'}},b:{null:null}}");
+		assertObject(t.paths()).asJson().is("{a:{a1:{description:'a2'}},b:{null:null}}");
 	}
 
 	/**
@@ -207,29 +207,29 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.definitions(AMap.of("foo",OMap.of("type","bar")));
-		assertObject(t.definitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.definitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.definitions(AMap.create());
-		assertObject(t.definitions()).isType(Map.class).json().is("{}");
+		assertObject(t.definitions()).isType(Map.class).asJson().is("{}");
 
 		t.definitions((Map<String,OMap>)null);
 		assertObject(t.definitions()).isNull();
 
 		t.addDefinitions(AMap.of("foo",OMap.of("type", "bar")));
-		assertObject(t.definitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.definitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.addDefinitions(AMap.create());
-		assertObject(t.definitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.definitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.addDefinitions(null);
-		assertObject(t.definitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.definitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.setDefinitions(null);
 		t.definition("a", OMap.of("type","a1"));
 		t.definition("b", (OMap)null);
 		t.definition(null, OMap.of("type", "c1"));
 
-		assertObject(t.definitions()).json().is("{a:{type:'a1'},b:null,null:{type:'c1'}}");
+		assertObject(t.definitions()).asJson().is("{a:{type:'a1'},b:null,null:{type:'c1'}}");
 	}
 
 	/**
@@ -240,29 +240,29 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.parameters(AMap.of("foo",parameterInfo().name("bar")));
-		assertObject(t.parameters()).isType(Map.class).json().is("{foo:{name:'bar'}}");
+		assertObject(t.parameters()).isType(Map.class).asJson().is("{foo:{name:'bar'}}");
 
 		t.parameters(AMap.create());
-		assertObject(t.parameters()).isType(Map.class).json().is("{}");
+		assertObject(t.parameters()).isType(Map.class).asJson().is("{}");
 
 		t.parameters((Map<String,ParameterInfo>)null);
 		assertObject(t.parameters()).isNull();
 
 		t.addParameters(AMap.of("foo",parameterInfo().name("bar")));
-		assertObject(t.parameters()).isType(Map.class).json().is("{foo:{name:'bar'}}");
+		assertObject(t.parameters()).isType(Map.class).asJson().is("{foo:{name:'bar'}}");
 
 		t.addParameters(AMap.create());
-		assertObject(t.parameters()).isType(Map.class).json().is("{foo:{name:'bar'}}");
+		assertObject(t.parameters()).isType(Map.class).asJson().is("{foo:{name:'bar'}}");
 
 		t.addParameters(null);
-		assertObject(t.parameters()).isType(Map.class).json().is("{foo:{name:'bar'}}");
+		assertObject(t.parameters()).isType(Map.class).asJson().is("{foo:{name:'bar'}}");
 
 		t.setParameters(null);
 		t.parameter("a", parameterInfo().in("a1"));
 		t.parameter("b", null);
 		t.parameter(null, parameterInfo().in("c1"));
 
-		assertObject(t.parameters()).json().is("{a:{'in':'a1'},b:null,null:{'in':'c1'}}");
+		assertObject(t.parameters()).asJson().is("{a:{'in':'a1'},b:null,null:{'in':'c1'}}");
 	}
 
 	/**
@@ -273,29 +273,29 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.responses(AMap.of("123",responseInfo("bar")));
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.responses(AMap.create());
-		assertObject(t.responses()).isType(Map.class).json().is("{}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{}");
 
 		t.responses((Map<String,ResponseInfo>)null);
 		assertObject(t.responses()).isNull();
 
 		t.addResponses(AMap.of("123",responseInfo("bar")));
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.addResponses(AMap.create());
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.addResponses(null);
-		assertObject(t.responses()).isType(Map.class).json().is("{'123':{description:'bar'}}");
+		assertObject(t.responses()).isType(Map.class).asJson().is("{'123':{description:'bar'}}");
 
 		t.setResponses(null);
 		t.response("a", responseInfo("a1"));
 		t.response(null, responseInfo("b1"));
 		t.response("c", null);
 
-		assertObject(t.responses()).json().is("{a:{description:'a1'},null:{description:'b1'},c:null}");
+		assertObject(t.responses()).asJson().is("{a:{description:'a1'},null:{description:'b1'},c:null}");
 	}
 
 	/**
@@ -306,29 +306,29 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.securityDefinitions(AMap.of("foo",securityScheme("bar")));
-		assertObject(t.securityDefinitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.securityDefinitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.securityDefinitions(AMap.create());
-		assertObject(t.securityDefinitions()).isType(Map.class).json().is("{}");
+		assertObject(t.securityDefinitions()).isType(Map.class).asJson().is("{}");
 
 		t.securityDefinitions((Map<String,SecurityScheme>)null);
 		assertObject(t.securityDefinitions()).isNull();
 
 		t.addSecurityDefinitions(AMap.of("foo",securityScheme("bar")));
-		assertObject(t.securityDefinitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.securityDefinitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.addSecurityDefinitions(AMap.create());
-		assertObject(t.securityDefinitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.securityDefinitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.addSecurityDefinitions(null);
-		assertObject(t.securityDefinitions()).isType(Map.class).json().is("{foo:{type:'bar'}}");
+		assertObject(t.securityDefinitions()).isType(Map.class).asJson().is("{foo:{type:'bar'}}");
 
 		t.setSecurityDefinitions(null);
 		t.securityDefinition("a", securityScheme("a1"));
 		t.securityDefinition("b", null);
 		t.securityDefinition(null, securityScheme("c1"));
 
-		assertObject(t.securityDefinitions()).json().is("{a:{type:'a1'},b:null,null:{type:'c1'}}");
+		assertObject(t.securityDefinitions()).asJson().is("{a:{type:'a1'},b:null,null:{type:'c1'}}");
 	}
 
 	/**
@@ -339,29 +339,29 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.security(ASet.of(AMap.of("foo",AList.of("bar"))));
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.security(ASet.of());
-		assertObject(t.security()).isType(List.class).json().is("[]");
+		assertObject(t.security()).isType(List.class).asJson().is("[]");
 
 		t.security((Collection<Map<String, List<String>>>)null);
 		assertObject(t.security()).isNull();
 
 		t.addSecurity(ASet.of(AMap.of("foo",AList.of("bar"))));
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.addSecurity(ASet.of());
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.addSecurity(null);
-		assertObject(t.security()).isType(List.class).json().is("[{foo:['bar']}]");
+		assertObject(t.security()).isType(List.class).asJson().is("[{foo:['bar']}]");
 
 		t.setSecurity(null);
 		t.security("a", "a1", "a2");
 		t.security("b", (String)null);
 		t.security(null, "d1", "d2");
 
-		assertObject(t.security()).json().is("[{a:['a1','a2']},{b:[null]},{null:['d1','d2']}]");
+		assertObject(t.security()).asJson().is("[{a:['a1','a2']},{b:[null]},{null:['d1','d2']}]");
 	}
 
 	/**
@@ -372,22 +372,22 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.tags(ASet.of(tag("foo")));
-		assertObject(t.tags()).isType(Set.class).json().is("[{name:'foo'}]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[{name:'foo'}]");
 
 		t.tags(ASet.of());
-		assertObject(t.tags()).isType(Set.class).json().is("[]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[]");
 
 		t.tags((Collection<Tag>)null);
 		assertObject(t.tags()).isNull();
 
 		t.addTags(ASet.of(tag("foo")));
-		assertObject(t.tags()).isType(Set.class).json().is("[{name:'foo'}]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[{name:'foo'}]");
 
 		t.addTags(ASet.of());
-		assertObject(t.tags()).isType(Set.class).json().is("[{name:'foo'}]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[{name:'foo'}]");
 
 		t.addTags(null);
-		assertObject(t.tags()).isType(Set.class).json().is("[{name:'foo'}]");
+		assertObject(t.tags()).isType(Set.class).asJson().is("[{name:'foo'}]");
 	}
 
 	/**
@@ -398,10 +398,10 @@ public class Swagger_Test {
 		Swagger t = new Swagger();
 
 		t.externalDocs(externalDocumentation("foo"));
-		assertObject(t.externalDocs()).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).asJson().is("{url:'foo'}");
 
 		t.externalDocs("{url:'foo'}");
-		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).asJson().is("{url:'foo'}");
 
 		t.externalDocs((String)null);
 		assertObject(t.externalDocs()).isNull();
@@ -432,7 +432,7 @@ public class Swagger_Test {
 			.set("tags", ASet.of(tag("o")))
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
 
 		t
 			.set("basePath", "a")
@@ -452,7 +452,7 @@ public class Swagger_Test {
 			.set("tags", "[{name:'o'}]")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
 
 		t
 			.set("basePath", new StringBuilder("a"))
@@ -472,7 +472,7 @@ public class Swagger_Test {
 			.set("tags", new StringBuilder("[{name:'o'}]"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
 
 		assertString(t.get("basePath", String.class)).is("a");
 		assertString(t.get("consumes", String.class)).is("['text/b']");
@@ -521,7 +521,7 @@ public class Swagger_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Swagger.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Swagger.class)).asJson().is(s);
 	}
 
 	@Test
@@ -530,7 +530,7 @@ public class Swagger_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{swagger:'2.0'}");
+		assertObject(t).asJson().is("{swagger:'2.0'}");
 
 		t
 			.set("basePath", "a")
@@ -551,14 +551,14 @@ public class Swagger_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
+		assertObject(t).asJson().is("{swagger:'n',info:{title:'f1',version:'f2'},tags:[{name:'o'}],externalDocs:{url:'d'},basePath:'a',schemes:['k1'],consumes:['text/b'],produces:['text/i'],paths:{h:{h1:{operationId:'h2'}}},definitions:{c:{type:'c1'}},parameters:{g:{'in':'g1',name:'g2'}},responses:{j:{description:'j1'}},securityDefinitions:{m:{type:'m1'}},security:[{l1:['l2']}],'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Swagger t = new Swagger();
 
-		assertObject(t.keySet()).json().is("['swagger']");
+		assertObject(t.keySet()).asJson().is("['swagger']");
 
 		t
 			.set("basePath", "a")
@@ -578,7 +578,7 @@ public class Swagger_Test {
 			.set("tags", ASet.of(tag("o")))
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is(
+		assertObject(t.keySet()).asJson().is(
 			"['basePath','consumes','definitions','externalDocs','host','info','parameters','paths','produces','responses',"
 			+ "'schemes','security','securityDefinitions','swagger','tags','$ref']"
 		);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
index eb735fe..ae177ed 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java
@@ -62,10 +62,10 @@ public class Tag_Test {
 		Tag t = new Tag();
 
 		t.externalDocs(externalDocumentation("foo"));
-		assertObject(t.externalDocs()).json().is("{url:'foo'}");
+		assertObject(t.externalDocs()).asJson().is("{url:'foo'}");
 
 		t.externalDocs("{url:'foo'}");
-		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).json().is("{url:'foo'}");;
+		assertObject(t.externalDocs()).isType(ExternalDocumentation.class).asJson().is("{url:'foo'}");;
 
 		t.externalDocs((String)null);
 		assertObject(t.externalDocs()).isNull();
@@ -84,7 +84,7 @@ public class Tag_Test {
 			.set("name", "c")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
 
 		t
 			.set("description", "a")
@@ -92,7 +92,7 @@ public class Tag_Test {
 			.set("name", "c")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
 
 		t
 			.set("description", new StringBuilder("a"))
@@ -100,7 +100,7 @@ public class Tag_Test {
 			.set("name", new StringBuilder("c"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
 
 		assertString(t.get("description", String.class)).is("a");
 		assertString(t.get("externalDocs", String.class)).is("{url:'b'}");
@@ -118,7 +118,7 @@ public class Tag_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Tag.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Tag.class)).asJson().is(s);
 	}
 
 	@Test
@@ -127,7 +127,7 @@ public class Tag_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("description", "a")
@@ -136,14 +136,14 @@ public class Tag_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Tag t = new Tag();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("description", "a")
@@ -151,6 +151,6 @@ public class Tag_Test {
 			.set("name", "c")
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['description','externalDocs','name','$ref']");
+		assertObject(t.keySet()).asJson().is("['description','externalDocs','name','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
index 8dfa2cf..84bf0d2 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java
@@ -116,7 +116,7 @@ public class Xml_Test {
 			.set("wrapped", true)
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
 
 		t
 			.set("attribute", "true")
@@ -126,7 +126,7 @@ public class Xml_Test {
 			.set("wrapped", "true")
 			.set("$ref", "ref");
 
-		assertObject(t).json().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
 
 		t
 			.set("attribute", new StringBuilder("true"))
@@ -136,7 +136,7 @@ public class Xml_Test {
 			.set("wrapped", new StringBuilder("true"))
 			.set("$ref", new StringBuilder("ref"));
 
-		assertObject(t).json().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
 
 		assertString(t.get("attribute", String.class)).is("true");
 		assertString(t.get("name", String.class)).is("a");
@@ -158,7 +158,7 @@ public class Xml_Test {
 		assertNull(t.get("foo", Object.class));
 
 		String s = "{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}";
-		assertObject(JsonParser.DEFAULT.parse(s, Xml.class)).json().is(s);
+		assertObject(JsonParser.DEFAULT.parse(s, Xml.class)).asJson().is(s);
 	}
 
 	@Test
@@ -167,7 +167,7 @@ public class Xml_Test {
 
 		t = t.copy();
 
-		assertObject(t).json().is("{}");
+		assertObject(t).asJson().is("{}");
 
 		t
 			.set("attribute", true)
@@ -178,14 +178,14 @@ public class Xml_Test {
 			.set("$ref", "ref")
 			.copy();
 
-		assertObject(t).json().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
+		assertObject(t).asJson().is("{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}");
 	}
 
 	@Test
 	public void b03_keySet() throws Exception {
 		Xml t = new Xml();
 
-		assertObject(t.keySet()).json().is("[]");
+		assertObject(t.keySet()).asJson().is("[]");
 
 		t
 			.set("attribute", true)
@@ -195,6 +195,6 @@ public class Xml_Test {
 			.set("wrapped", true)
 			.set("$ref", "ref");
 
-		assertObject(t.keySet()).json().is("['attribute','name','namespace','prefix','wrapped','$ref']");
+		assertObject(t.keySet()).asJson().is("['attribute','name','namespace','prefix','wrapped','$ref']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
index d91c971..0901556 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
@@ -69,15 +69,15 @@ public class EncoderGroupTest {
 
 		gb = EncoderGroup.create().append(E1.class, E2.class);
 		g = gb.build();
-		assertObject(g.getSupportedEncodings()).json().is("['E1','E2','E2a']");
+		assertObject(g.getSupportedEncodings()).asJson().is("['E1','E2','E2a']");
 
 		gb = g.builder().append(E3.class, E4.class);
 		g = gb.build();
-		assertObject(g.getSupportedEncodings()).json().is("['E3','E4','E4a','E1','E2','E2a']");
+		assertObject(g.getSupportedEncodings()).asJson().is("['E3','E4','E4a','E1','E2','E2a']");
 
 		gb = g.builder().append(E5.class);
 		g = gb.build();
-		assertObject(g.getSupportedEncodings()).json().is("['E5','E3','E4','E4a','E1','E2','E2a']");
+		assertObject(g.getSupportedEncodings()).asJson().is("['E5','E3','E4','E4a','E1','E2','E2a']");
 	}
 
 	public static class E1 extends GzipEncoder {
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/Common_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/Common_Test.java
index 1deb5fd..e10592a 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/Common_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/Common_Test.java
@@ -41,13 +41,13 @@ public class Common_Test {
 		String r = s.build().serialize(t1);
 		assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s1</td><td><null/></td></tr><tr><td>s2</td><td>s2</td></tr></table>", r);
 		t2 = p.parse(r, A.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 
 		s = HtmlSerializer.create().sq().addKeyValueTableHeaders();
 		r = s.build().serialize(t1);
 		assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table>", r);
 		t2 = p.parse(r, A.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 	}
 
 	public static class A {
@@ -73,7 +73,7 @@ public class Common_Test {
 		r = s.build().serialize(t1);
 		assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><table><tr><th>key</th><th>value</th></tr></table></td></tr><tr><td>f2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>f2a</td><td><null/></td></tr><tr><td>f2b</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table></td></tr></table></td></tr></table>", r);
 		t2 = p.parse(r, B.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 
 		s.trimEmptyMaps();
 		r = s.build().serialize(t1);
@@ -106,7 +106,7 @@ public class Common_Test {
 		r = s.build().serialize(t1);
 		assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><ul></ul></td></tr><tr><td>f2</td><td><table _type='array'><tr><th>s1</th><th>s2</th></tr><tr><null/></tr><tr><td><null/></td><td>s2</td></tr></table></td></tr></table>", r);
 		t2 = p.parse(r, C.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 
 		s.trimEmptyCollections();
 		r = s.build().serialize(t1);
@@ -158,7 +158,7 @@ public class Common_Test {
 			r);
 
 		t2 = p.parse(r, D.class);
-		assertObject(t1).sameAs(t2);
+		assertObject(t1).isSameJsonAs(t2);
 
 		s.trimEmptyCollections();
 		r = s.build().serialize(t1);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlAnnotation_Test.java
index 40aa514..ca53009 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlAnnotation_Test.java
@@ -53,7 +53,7 @@ public class HtmlAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "anchorText:'a',"
 				+ "format:'XML',"
@@ -104,10 +104,10 @@ public class HtmlAnnotation_Test {
 		Html c3 = HtmlAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Html c4 = HtmlAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation_Test.java
index 4d486fb..23fa427 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/annotation/HtmlLinkAnnotation_Test.java
@@ -42,7 +42,7 @@ public class HtmlLinkAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "nameProperty:'a',"
 				+ "on:['b'],"
@@ -87,8 +87,8 @@ public class HtmlLinkAnnotation_Test {
 		HtmlLink c1 = HtmlLinkAnnotation.create(C1.class).on(C2.class).build();
 		HtmlLink c2 = HtmlLinkAnnotation.create("a").on("b").build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
index 0825ec1..166d95d 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
@@ -52,9 +52,9 @@ public class BasicHeader_Test {
 	public void a02_of() {
 		BasicHeader x;
 		x = header("Foo","bar");
-		assertObject(x).json().is("'Foo: bar'");
+		assertObject(x).asJson().is("'Foo: bar'");
 		x = header("Foo",()->"bar");
-		assertObject(x).json().is("'Foo: bar'");
+		assertObject(x).asJson().is("'Foo: bar'");
 	}
 
 	@Test
@@ -79,15 +79,15 @@ public class BasicHeader_Test {
 		};
 		SerializedNameValuePair x9 = SerializedNameValuePair.of("X9",()->"9");
 
-		assertObject(BasicHeader.cast(x1)).isType(Header.class).json().is("'X1: 1'");
-		assertObject(BasicHeader.cast(x2)).isType(Header.class).json().is("'X2: 2'");
-		assertObject(BasicHeader.cast(x3)).isType(Header.class).json().is("'X3: 3'");
-		assertObject(BasicHeader.cast(x4)).isType(Header.class).json().is("'X4: 4'");
-		assertObject(BasicHeader.cast(x5)).isType(Header.class).json().is("'X5: 5'");
-		assertObject(BasicHeader.cast(x6)).isType(Header.class).json().is("'X6: 6'");
-		assertObject(BasicHeader.cast(x7)).isType(Header.class).json().is("'X7: 7'");
-		assertObject(BasicHeader.cast(x8)).isType(Header.class).json().is("'X8: 8'");
-		assertObject(BasicHeader.cast(x9)).isType(Header.class).json().is("'X9: 9'");
+		assertObject(BasicHeader.cast(x1)).isType(Header.class).asJson().is("'X1: 1'");
+		assertObject(BasicHeader.cast(x2)).isType(Header.class).asJson().is("'X2: 2'");
+		assertObject(BasicHeader.cast(x3)).isType(Header.class).asJson().is("'X3: 3'");
+		assertObject(BasicHeader.cast(x4)).isType(Header.class).asJson().is("'X4: 4'");
+		assertObject(BasicHeader.cast(x5)).isType(Header.class).asJson().is("'X5: 5'");
+		assertObject(BasicHeader.cast(x6)).isType(Header.class).asJson().is("'X6: 6'");
+		assertObject(BasicHeader.cast(x7)).isType(Header.class).asJson().is("'X7: 7'");
+		assertObject(BasicHeader.cast(x8)).isType(Header.class).asJson().is("'X8: 8'");
+		assertObject(BasicHeader.cast(x9)).isType(Header.class).asJson().is("'X9: 9'");
 
 		assertThrown(()->BasicHeader.cast("X")).is("Object of type java.lang.String could not be converted to a Header.");
 		assertThrown(()->BasicHeader.cast(null)).is("Object of type null could not be converted to a Header.");
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpEntity_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpEntity_Test.java
index e3e04bb..8aa75c9 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpEntity_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpEntity_Test.java
@@ -31,96 +31,96 @@ public class BasicHttpEntity_Test {
 		assertNull(x.getContentEncoding());
 
 		x = of("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(new StringReader("foo"));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of("foo".getBytes());
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(new ByteArrayInputStream("foo".getBytes()));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of(null);
-		assertStream(x.getContent()).string().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
 		assertFalse(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(f);
-		assertStream(x.getContent()).string().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 
 		x = of(()->"foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(()->new StringReader("foo"));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of(()->"foo".getBytes());
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(()->new ByteArrayInputStream("foo".getBytes()));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of(()->null);
-		assertStream(x.getContent()).string().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
 		assertFalse(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(()->f);
-		assertStream(x.getContent()).string().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 
 		x = of("foo").cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(new StringReader("foo")).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of("foo".getBytes()).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(new ByteArrayInputStream("foo".getBytes())).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(null).cache();
-		assertStream(x.getContent()).string().doesNotExist();
-		assertStream(x.getContent()).string().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
 		assertTrue(x.isRepeatable());
 		x.writeTo(new ByteArrayOutputStream());
 
 		x = of(f).cache();
-		assertStream(x.getContent()).string().isEmpty();
-		assertStream(x.getContent()).string().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
 		assertTrue(x.isRepeatable());
 		x.writeTo(new ByteArrayOutputStream());
 
@@ -171,7 +171,7 @@ public class BasicHttpEntity_Test {
 	@Test
 	public void a05_asBytes() throws Exception {
 		BasicHttpEntity x1 = of(new StringReader("foo"));
-		assertBytes(x1.asBytes()).spacedHex().is("66 6F 6F");
+		assertBytes(x1.asBytes()).asSpacedHex().is("66 6F 6F");
 		BasicHttpEntity x2 = of((String)null);
 		assertBytes(x2.asBytes()).doesNotExist();
 	}
@@ -187,7 +187,7 @@ public class BasicHttpEntity_Test {
 	@Test
 	public void a07_assertBytes() throws Exception {
 		BasicHttpEntity x1 = of(new StringReader("foo"));
-		x1.assertBytes().spacedHex().is("66 6F 6F");
+		x1.assertBytes().asSpacedHex().is("66 6F 6F");
 		BasicHttpEntity x2 = of((String)null);
 		x2.assertBytes().doesNotExist();
 	}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
index 08f63db..4589f199 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
@@ -34,64 +34,64 @@ public class BasicHttpResource_Test {
 		assertList(x.getHeaders()).isSize(0);
 
 		x = of("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(new StringReader("foo"));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of("foo".getBytes());
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(new ByteArrayInputStream("foo".getBytes()));
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertFalse(x.isRepeatable());
 		assertTrue(x.isStreaming());
 
 		x = of(null);
-		assertStream(x.getContent()).string().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
 		assertFalse(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of(f);
-		assertStream(x.getContent()).string().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
 		assertTrue(x.isRepeatable());
 		assertFalse(x.isStreaming());
 
 		x = of("foo").cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(new StringReader("foo")).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of("foo".getBytes()).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(new ByteArrayInputStream("foo".getBytes())).cache();
-		assertStream(x.getContent()).string().is("foo");
-		assertStream(x.getContent()).string().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
+		assertStream(x.getContent()).asString().is("foo");
 		assertTrue(x.isRepeatable());
 
 		x = of(null).cache();
-		assertStream(x.getContent()).string().doesNotExist();
-		assertStream(x.getContent()).string().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
+		assertStream(x.getContent()).asString().doesNotExist();
 		assertTrue(x.isRepeatable());
 		x.writeTo(new ByteArrayOutputStream());
 
 		x = of(f).cache();
-		assertStream(x.getContent()).string().isEmpty();
-		assertStream(x.getContent()).string().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
+		assertStream(x.getContent()).asString().isEmpty();
 		assertTrue(x.isRepeatable());
 		x.writeTo(new ByteArrayOutputStream());
 
@@ -130,7 +130,7 @@ public class BasicHttpResource_Test {
 		assertString(x.getLastHeader("Foo").toString()).is("Foo: baz");
 		assertObject(x.getFirstHeader("Bar")).doesNotExist();
 		assertObject(x.getLastHeader("Bar")).doesNotExist();
-		assertObject(x.getHeaders()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.getHeaders()).asJson().is("['Foo: bar','Foo: baz']");
 	}
 
 	@Test
@@ -142,7 +142,7 @@ public class BasicHttpResource_Test {
 		assertString(x.getLastHeader("Foo").toString()).is("Foo: baz");
 		assertObject(x.getFirstHeader("Bar").getValue()).doesNotExist();
 		assertObject(x.getLastHeader("Bar").getValue()).doesNotExist();
-		assertObject(x.getHeaders()).json().is("[null,'Foo: bar','Foo: baz','null: bar','Bar: null',null]");
+		assertObject(x.getHeaders()).asJson().is("[null,'Foo: bar','Foo: baz','null: bar','Bar: null',null]");
 	}
 
 	@Test
@@ -154,7 +154,7 @@ public class BasicHttpResource_Test {
 		assertString(x.getLastHeader("Foo").toString()).is("Foo: baz");
 		assertObject(x.getFirstHeader("Bar").getValue()).doesNotExist();
 		assertObject(x.getLastHeader("Bar").getValue()).doesNotExist();
-		assertObject(x.getHeaders()).json().is("['Foo: bar','Foo: baz','null: bar','Bar: null',null]");
+		assertObject(x.getHeaders()).asJson().is("['Foo: bar','Foo: baz','null: bar','Bar: null',null]");
 	}
 
 	@Test
@@ -166,7 +166,7 @@ public class BasicHttpResource_Test {
 		assertString(x.getLastHeader("Foo").toString()).is("Foo: baz");
 		assertObject(x.getFirstHeader("Bar").getValue()).doesNotExist();
 		assertObject(x.getLastHeader("Bar").getValue()).doesNotExist();
-		assertObject(x.getHeaders()).json().is("['Foo: bar','Foo: baz','null: bar','Bar: null',null]");
+		assertObject(x.getHeaders()).asJson().is("['Foo: bar','Foo: baz','null: bar','Bar: null',null]");
 	}
 
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
index 50cce71..c259ab0 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/BasicNameValuePair_Test.java
@@ -51,9 +51,9 @@ public class BasicNameValuePair_Test {
 	public void a02_of() {
 		BasicNameValuePair x;
 		x = pair("Foo","bar");
-		assertObject(x).json().is("'Foo=bar'");
+		assertObject(x).asJson().is("'Foo=bar'");
 		x = pair("Foo",()->"bar");
-		assertObject(x).json().is("'Foo=bar'");
+		assertObject(x).asJson().is("'Foo=bar'");
 	}
 
 	@Test
@@ -77,14 +77,14 @@ public class BasicNameValuePair_Test {
 			}
 		};
 
-		assertObject(BasicNameValuePair.cast(x1)).isType(NameValuePair.class).json().is("'X1=1'");
-		assertObject(BasicNameValuePair.cast(x2)).isType(NameValuePair.class).json().is("'X2=2'");
-		assertObject(BasicNameValuePair.cast(x3)).isType(NameValuePair.class).json().is("'X3: 3'");
-		assertObject(BasicNameValuePair.cast(x4)).isType(NameValuePair.class).json().is("'X4: 4'");
-		assertObject(BasicNameValuePair.cast(x5)).isType(NameValuePair.class).json().is("'X5=5'");
-		assertObject(BasicNameValuePair.cast(x6)).isType(NameValuePair.class).json().is("{name:'X6',value:'6'}");
-		assertObject(BasicNameValuePair.cast(x7)).isType(NameValuePair.class).json().is("'X7=7'");
-		assertObject(BasicNameValuePair.cast(x8)).isType(NameValuePair.class).json().is("'X8: 8'");
+		assertObject(BasicNameValuePair.cast(x1)).isType(NameValuePair.class).asJson().is("'X1=1'");
+		assertObject(BasicNameValuePair.cast(x2)).isType(NameValuePair.class).asJson().is("'X2=2'");
+		assertObject(BasicNameValuePair.cast(x3)).isType(NameValuePair.class).asJson().is("'X3: 3'");
+		assertObject(BasicNameValuePair.cast(x4)).isType(NameValuePair.class).asJson().is("'X4: 4'");
+		assertObject(BasicNameValuePair.cast(x5)).isType(NameValuePair.class).asJson().is("'X5=5'");
+		assertObject(BasicNameValuePair.cast(x6)).isType(NameValuePair.class).asJson().is("{name:'X6',value:'6'}");
+		assertObject(BasicNameValuePair.cast(x7)).isType(NameValuePair.class).asJson().is("'X7=7'");
+		assertObject(BasicNameValuePair.cast(x8)).isType(NameValuePair.class).asJson().is("'X8: 8'");
 
 		assertThrown(()->BasicNameValuePair.cast("X")).is("Object of type java.lang.String could not be converted to a NameValuePair.");
 		assertThrown(()->BasicNameValuePair.cast(null)).is("Object of type null could not be converted to a NameValuePair.");
@@ -105,7 +105,7 @@ public class BasicNameValuePair_Test {
 	@Test
 	public void a04_asHeader() {
 		BasicNameValuePair x = pair("X1","1");
-		assertObject(x.asHeader()).isType(Header.class).json().is("'X1: 1'");
+		assertObject(x.asHeader()).isType(Header.class).asJson().is("'X1: 1'");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
index f9732a8..aed766a 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplier_Test.java
@@ -28,25 +28,25 @@ public class HeaderSupplier_Test {
 	public void a01_basic() {
 		HeaderSupplier x = HeaderSupplier.of();
 
-		assertObject(x.iterator()).json().is("[]");
+		assertObject(x.iterator()).asJson().is("[]");
 		x.add(header("Foo","bar"));
-		assertObject(x.iterator()).json().is("['Foo: bar']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar']");
 		x.add(header("Foo","baz"));
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz']");
 		x.add(HeaderSupplier.of());
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz']");
 		x.add(HeaderSupplier.of(header("Foo","qux")));
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz','Foo: qux']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz','Foo: qux']");
 		x.add(HeaderSupplier.of(header("Foo","q2x"), header("Foo","q3x")));
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x']");
 		x.add(HeaderSupplier.of(HeaderSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
 		x.add((Header)null);
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
 		x.add((HeaderSupplier)null);
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
 
-		assertObject(new HeaderSupplier.Null().iterator()).json().is("[]");
+		assertObject(new HeaderSupplier.Null().iterator()).asJson().is("[]");
 	}
 
 	@Test
@@ -54,13 +54,13 @@ public class HeaderSupplier_Test {
 		HeaderSupplier x;
 
 		x = HeaderSupplier.of(header("Foo","bar"), header("Foo","baz"), null);
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz']");
 
 		x = HeaderSupplier.of(AList.of(header("Foo","bar"), header("Foo","baz"), null));
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz']");
 
 		x = HeaderSupplier.ofPairs("Foo","bar","Foo","baz");
-		assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+		assertObject(x.iterator()).asJson().is("['Foo: bar','Foo: baz']");
 
 		assertThrown(()->HeaderSupplier.ofPairs("Foo")).is("Odd number of parameters passed into HeaderSupplier.ofPairs()");
 
@@ -96,8 +96,8 @@ public class HeaderSupplier_Test {
 			.create()
 			.add("X1","1")
 			.add(HeaderSupplier.ofPairs("X2","2"));
-		assertObject(x.toArray()).json().is("['X1: 1','X2: 2']");
-		assertObject(x.toArray(new Header[0])).json().is("['X1: 1','X2: 2']");
+		assertObject(x.toArray()).asJson().is("['X1: 1','X2: 2']");
+		assertObject(x.toArray(new Header[0])).asJson().is("['X1: 1','X2: 2']");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaRanges_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaRanges_Test.java
index ac6508a..d61037b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaRanges_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaRanges_Test.java
@@ -36,9 +36,9 @@ public class MediaRanges_Test {
 		x1 = of("text/json");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json");
-		assertObject(x2.getParameters()).json().is("[]");
+		assertObject(x2.getParameters()).asJson().is("[]");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		assertNull(x1.getRange(-1));
 		assertNull(x1.getRange(1));
@@ -46,65 +46,65 @@ public class MediaRanges_Test {
 		x1 = of("foo,bar");
 		x2 = x1.getRange(0);
 		assertString(x2).is("foo");
-		assertObject(x2.getParameters()).json().is("[]");
+		assertObject(x2.getParameters()).asJson().is("[]");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		x1 = of(" foo , bar ");
 		x2 = x1.getRange(0);
 		assertString(x2).is("foo");
-		assertObject(x2.getParameters()).json().is("[]");
+		assertObject(x2.getParameters()).asJson().is("[]");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		x1 = of("text/json;a=1;q=0.9;b=2");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;a=1;q=0.9;b=2");
-		assertObject(x2.getParameters()).json().is("['a=1']");
+		assertObject(x2.getParameters()).asJson().is("['a=1']");
 		assertString(x2.getQValue()).is("0.9");
-		assertObject(x2.getExtensions()).json().is("['b=2']");
+		assertObject(x2.getExtensions()).asJson().is("['b=2']");
 
 		x1 = of("text/json;a=1;a=2;q=0.9;b=3;b=4");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;a=1;a=2;q=0.9;b=3;b=4");
-		assertObject(x2.getParameters()).json().is("['a=1','a=2']");
+		assertObject(x2.getParameters()).asJson().is("['a=1','a=2']");
 		assertString(x2.getQValue()).is("0.9");
-		assertObject(x2.getExtensions()).json().is("['b=3','b=4']");
+		assertObject(x2.getExtensions()).asJson().is("['b=3','b=4']");
 
 		x1 = of("text/json;a=1;a=2;q=1.0;b=3;b=4");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;a=1;a=2;q=1.0;b=3;b=4");
-		assertObject(x2.getParameters()).json().is("['a=1','a=2']");
+		assertObject(x2.getParameters()).asJson().is("['a=1','a=2']");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("['b=3','b=4']");
+		assertObject(x2.getExtensions()).asJson().is("['b=3','b=4']");
 
 		x1 = of("text/json;a=1");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;a=1");
-		assertObject(x2.getParameters()).json().is("['a=1']");
+		assertObject(x2.getParameters()).asJson().is("['a=1']");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		x1 = of("text/json;a=1;");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;a=1");
-		assertObject(x2.getParameters()).json().is("['a=1']");
+		assertObject(x2.getParameters()).asJson().is("['a=1']");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		x1 = of("text/json;q=0.9");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;q=0.9");
-		assertObject(x2.getParameters()).json().is("[]");
+		assertObject(x2.getParameters()).asJson().is("[]");
 		assertString(x2.getQValue()).is("0.9");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		x1 = of("text/json;q=0.9;");
 		x2 = x1.getRange(0);
 		assertString(x2).is("text/json;q=0.9");
-		assertObject(x2.getParameters()).json().is("[]");
+		assertObject(x2.getParameters()).asJson().is("[]");
 		assertString(x2.getQValue()).is("0.9");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 	}
 
 	@Test
@@ -152,6 +152,6 @@ public class MediaRanges_Test {
 	@Test
 	public void a05_getRanges() {
 		MediaRanges x1 = of("text/json");
-		assertObject(x1.getRanges()).json().is("['text/json']");
+		assertObject(x1.getRanges()).asJson().is("['text/json']");
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaType_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaType_Test.java
index fd0d1d6..5250b46 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaType_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/MediaType_Test.java
@@ -31,12 +31,12 @@ public class MediaType_Test {
 		Set<MediaType> x = new TreeSet<>();
 		x.add(MediaType.of("text/foo"));
 		x.add(MediaType.of("text/bar"));
-		assertObject(x).json().is("['text/bar','text/foo']");
+		assertObject(x).asJson().is("['text/bar','text/foo']");
 
 		MediaType x2 = new MediaType((String)null);  // Interpreted as "/*"
 		assertString(x2.getType()).isEmpty();
 		assertString(x2.getSubType()).is("*");
-		assertObject(x2.getSubTypes()).json().is("['*']");
+		assertObject(x2.getSubTypes()).asJson().is("['*']");
 		assertTrue(x2.isMetaSubtype());
 
 		MediaType x3 = MediaType.of("text/foo+bar");
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
index bb3014c..690fd96 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplier_Test.java
@@ -28,25 +28,25 @@ public class NameValuePairSupplier_Test {
 	public void a01_basic() {
 		NameValuePairSupplier x = NameValuePairSupplier.of();
 
-		assertObject(x.iterator()).json().is("[]");
+		assertObject(x.iterator()).asJson().is("[]");
 		x.add(pair("Foo","bar"));
-		assertObject(x.iterator()).json().is("['Foo=bar']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar']");
 		x.add(pair("Foo","baz"));
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz']");
 		x.add(NameValuePairSupplier.of());
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz']");
 		x.add(NameValuePairSupplier.of(pair("Foo","qux")));
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz','Foo=qux']");
 		x.add(NameValuePairSupplier.of(pair("Foo","q2x"), pair("Foo","q3x")));
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x']");
 		x.add(NameValuePairSupplier.of(NameValuePairSupplier.of(pair("Foo","q4x"),pair("Foo","q5x"))));
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
 		x.add((Header)null);
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
 		x.add((NameValuePairSupplier)null);
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz','Foo=qux','Foo=q2x','Foo=q3x','Foo=q4x','Foo=q5x']");
 
-		assertObject(new NameValuePairSupplier.Null().iterator()).json().is("[]");
+		assertObject(new NameValuePairSupplier.Null().iterator()).asJson().is("[]");
 	}
 
 	@Test
@@ -54,13 +54,13 @@ public class NameValuePairSupplier_Test {
 		NameValuePairSupplier x;
 
 		x = NameValuePairSupplier.of(pair("Foo","bar"), pair("Foo","baz"), null);
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz']");
 
 		x = NameValuePairSupplier.of(AList.of(pair("Foo","bar"), pair("Foo","baz"), null));
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz']");
 
 		x = NameValuePairSupplier.ofPairs("Foo","bar","Foo","baz");
-		assertObject(x.iterator()).json().is("['Foo=bar','Foo=baz']");
+		assertObject(x.iterator()).asJson().is("['Foo=bar','Foo=baz']");
 
 		assertThrown(()->NameValuePairSupplier.ofPairs("Foo")).is("Odd number of parameters passed into NameValuePairSupplier.ofPairs()");
 
@@ -96,8 +96,8 @@ public class NameValuePairSupplier_Test {
 			.create()
 			.add("X1","1")
 			.add(NameValuePairSupplier.ofPairs("X2","2"));
-		assertObject(x.toArray()).json().is("['X1=1','X2=2']");
-		assertObject(x.toArray(new NameValuePair[0])).json().is("['X1=1','X2=2']");
+		assertObject(x.toArray()).asJson().is("['X1=1','X2=2']");
+		assertObject(x.toArray(new NameValuePair[0])).asJson().is("['X1=1','X2=2']");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
index 9f76799..ce69a7b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
@@ -64,7 +64,7 @@ public class SerializedHttpEntity_Test {
 
 	@Test
 	public void a03_serializer_streaming() throws Exception {
-		of(ABean.get(),MsgPackSerializer.DEFAULT).assertBytes().spacedHex().is("82 A1 61 01 A1 62 A3 66 6F 6F");
+		of(ABean.get(),MsgPackSerializer.DEFAULT).assertBytes().asSpacedHex().is("82 A1 61 01 A1 62 A3 66 6F 6F");
 	}
 
 	@Test
@@ -76,7 +76,7 @@ public class SerializedHttpEntity_Test {
 	public void a05_writeTo() throws Exception {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
 		of(new ByteArrayInputStream("foo".getBytes()), null).writeTo(baos);
-		assertBytes(baos.toByteArray()).string().is("foo");
+		assertBytes(baos.toByteArray()).asString().is("foo");
 	}
 
 	@Test
@@ -95,7 +95,7 @@ public class SerializedHttpEntity_Test {
 
 	@Test
 	public void a08_getContent() throws Exception {
-		assertStream(of(new StringReader("foo"),null).getContent()).string().is("foo");
+		assertStream(of(new StringReader("foo"),null).getContent()).asString().is("foo");
 
 		SerializedHttpEntity x = new SerializedHttpEntity("foo", null) {
 			@Override
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRange_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRange_Test.java
index 7787c5c..d5ad686 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRange_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRange_Test.java
@@ -25,15 +25,15 @@ public class StringRange_Test {
 	public void a01_basic() throws Exception {
 		StringRange x1 = of("foo;a=1;q=0.5;b=2");
 		assertString(x1.getQValue()).is("0.5");
-		assertObject(x1.getExtensions()).json().is("['a=1','b=2']");
+		assertObject(x1.getExtensions()).asJson().is("['a=1','b=2']");
 
 		StringRange x2 = of("foo;q=1.0");
 		assertString(x2.getQValue()).is("1.0");
-		assertObject(x2.getExtensions()).json().is("[]");
+		assertObject(x2.getExtensions()).asJson().is("[]");
 
 		StringRange x3 = of("foo;a=1");
 		assertString(x3.getQValue()).is("1.0");
-		assertObject(x3.getExtensions()).json().is("['a=1']");
+		assertObject(x3.getExtensions()).asJson().is("['a=1']");
 
 		StringRange x4 = of("foo;a=1");
 		assertObject(x3).is(x4);
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRanges_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRanges_Test.java
index 88ef0bc..20ee054 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRanges_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/StringRanges_Test.java
@@ -54,8 +54,8 @@ public class StringRanges_Test {
 
 	@Test
 	public void a03_getRanges() throws Exception {
-		assertObject(of("foo").getRanges()).json().is("['foo']");
-		assertObject(of(null).getRanges()).json().is("[]");
+		assertObject(of("foo").getRanges()).asJson().is("['foo']");
+		assertObject(of(null).getRanges()).asJson().is("[]");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/AnnotationUtils_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/AnnotationUtils_Test.java
index 659874e..3499eb9 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/AnnotationUtils_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/AnnotationUtils_Test.java
@@ -58,7 +58,7 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a01_Body() throws Exception {
-		assertObject(body().build().annotationType()).json().contains("Body");
+		assertObject(body().build().annotationType()).asJson().contains("Body");
 
 		assertTrue(BodyAnnotation.empty(A1.class.getAnnotation(Body.class)));
 		assertTrue(BodyAnnotation.empty(A2.class.getAnnotation(Body.class)));
@@ -82,7 +82,7 @@ public class AnnotationUtils_Test {
 	public void a02_Contact() throws Exception {
 		X1 x1 = A1.class.getAnnotation(X1.class);
 
-		assertObject(contact().build().annotationType()).json().contains("Contact");
+		assertObject(contact().build().annotationType()).asJson().contains("Contact");
 
 		assertTrue(ContactAnnotation.empty(x1.contact()));
 		assertTrue(ContactAnnotation.empty(contact().build()));
@@ -99,7 +99,7 @@ public class AnnotationUtils_Test {
 		Field f1 = A1.class.getField("f1");
 		Field f2 = A2.class.getField("f1");
 
-		assertObject(formData().build().annotationType()).json().contains("FormData");
+		assertObject(formData().build().annotationType()).asJson().contains("FormData");
 
 		assertTrue(FormDataAnnotation.empty(f1.getAnnotation(FormData.class)));
 		assertTrue(FormDataAnnotation.empty(f2.getAnnotation(FormData.class)));
@@ -160,11 +160,11 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a04_HasFormData() throws Exception {
-		assertObject(hasFormData().build().annotationType()).json().contains("HasFormData");
+		assertObject(hasFormData().build().annotationType()).asJson().contains("HasFormData");
 
-		assertObject(hasFormData().n("foo").build().n()).json().is("'foo'");
-		assertObject(hasFormData().name("foo").build().name()).json().is("'foo'");
-		assertObject(hasFormData().value("foo").build().value()).json().is("'foo'");
+		assertObject(hasFormData().n("foo").build().n()).asJson().is("'foo'");
+		assertObject(hasFormData().name("foo").build().name()).asJson().is("'foo'");
+		assertObject(hasFormData().value("foo").build().value()).asJson().is("'foo'");
 	}
 
 	@Test
@@ -172,7 +172,7 @@ public class AnnotationUtils_Test {
 		Field f1 = A1.class.getField("f1");
 		Field f2 = A2.class.getField("f1");
 
-		assertObject(query().build().annotationType()).json().contains("Query");
+		assertObject(query().build().annotationType()).asJson().contains("Query");
 
 		assertTrue(QueryAnnotation.empty(f1.getAnnotation(Query.class)));
 		assertTrue(QueryAnnotation.empty(f2.getAnnotation(Query.class)));
@@ -233,11 +233,11 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a06_HasQuery() throws Exception {
-		assertObject(hasQuery().build().annotationType()).json().contains("HasQuery");
+		assertObject(hasQuery().build().annotationType()).asJson().contains("HasQuery");
 
-		assertObject(hasQuery().n("foo").build().n()).json().is("'foo'");
-		assertObject(hasQuery().name("foo").build().name()).json().is("'foo'");
-		assertObject(hasQuery().value("foo").build().value()).json().is("'foo'");
+		assertObject(hasQuery().n("foo").build().n()).asJson().is("'foo'");
+		assertObject(hasQuery().name("foo").build().name()).asJson().is("'foo'");
+		assertObject(hasQuery().value("foo").build().value()).asJson().is("'foo'");
 	}
 
 	@Test
@@ -245,7 +245,7 @@ public class AnnotationUtils_Test {
 		Field f1 = A1.class.getField("f1");
 		Field f2 = A2.class.getField("f1");
 
-		assertObject(header().build().annotationType()).json().contains("Header");
+		assertObject(header().build().annotationType()).asJson().contains("Header");
 
 		assertTrue(HeaderAnnotation.empty(f1.getAnnotation(Header.class)));
 		assertTrue(HeaderAnnotation.empty(f2.getAnnotation(Header.class)));
@@ -308,7 +308,7 @@ public class AnnotationUtils_Test {
 	public void a08_License() throws Exception {
 		X1 x = A1.class.getAnnotation(X1.class);
 
-		assertObject(license().build().annotationType()).json().contains("License");
+		assertObject(license().build().annotationType()).asJson().contains("License");
 
 		assertTrue(LicenseAnnotation.empty(x.license()));
 		assertTrue(LicenseAnnotation.empty((License)null));
@@ -324,7 +324,7 @@ public class AnnotationUtils_Test {
 		Field f1 = A1.class.getField("f1");
 		Field f2 = A2.class.getField("f1");
 
-		assertObject(path().build().annotationType()).json().contains("Path");
+		assertObject(path().build().annotationType()).asJson().contains("Path");
 
 		assertTrue(PathAnnotation.empty(f1.getAnnotation(Path.class)));
 		assertTrue(PathAnnotation.empty(f2.getAnnotation(Path.class)));
@@ -380,15 +380,15 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a10_Request() throws Exception {
-		assertObject(request().build().annotationType()).json().contains("Request");
+		assertObject(request().build().annotationType()).asJson().contains("Request");
 
-		assertObject(request().parser(OpenApiParser.class).build().parser()).json().is("'org.apache.juneau.oapi.OpenApiParser'");
-		assertObject(request().serializer(OpenApiSerializer.class).build().serializer()).json().is("'org.apache.juneau.oapi.OpenApiSerializer'");
+		assertObject(request().parser(OpenApiParser.class).build().parser()).asJson().is("'org.apache.juneau.oapi.OpenApiParser'");
+		assertObject(request().serializer(OpenApiSerializer.class).build().serializer()).asJson().is("'org.apache.juneau.oapi.OpenApiSerializer'");
 	}
 
 	@Test
 	public void a11_Response() throws Exception {
-		assertObject(response().build().annotationType()).json().contains("Response");
+		assertObject(response().build().annotationType()).asJson().contains("Response");
 
 		assertTrue(ResponseAnnotation.empty(A1.class.getAnnotation(Response.class)));
 		assertTrue(ResponseAnnotation.empty(A2.class.getAnnotation(Response.class)));
@@ -412,12 +412,12 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a12_ResponseBody() throws Exception {
-		assertObject(responseBody().build().annotationType()).json().contains("ResponseBody");
+		assertObject(responseBody().build().annotationType()).asJson().contains("ResponseBody");
 	}
 
 	@Test
 	public void a13_ResponseHeader() throws Exception {
-		assertObject(responseHeader().build().annotationType()).json().contains("ResponseHeader");
+		assertObject(responseHeader().build().annotationType()).asJson().contains("ResponseHeader");
 
 		assertTrue(ResponseHeaderAnnotation.empty(A1.class.getAnnotation(ResponseHeader.class)));
 		assertTrue(ResponseHeaderAnnotation.empty(A2.class.getAnnotation(ResponseHeader.class)));
@@ -469,24 +469,24 @@ public class AnnotationUtils_Test {
 
 	@Test
 	public void a14_ResponseStatus() throws Exception {
-		assertObject(responseStatus().build().annotationType()).json().contains("ResponseStatus");
+		assertObject(responseStatus().build().annotationType()).asJson().contains("ResponseStatus");
 	}
 
 	@Test
 	public void a15_Tag() throws Exception {
-		assertObject(tag().build().annotationType()).json().contains("Tag");
+		assertObject(tag().build().annotationType()).asJson().contains("Tag");
 
-		assertObject(tag().description(a("foo")).build().description()).json().is("['foo']");
-		assertObject(tag().externalDocs(externalDocs().url("foo").build()).build().externalDocs().url()).json().is("'foo'");
-		assertObject(tag().name("foo").build().name()).json().is("'foo'");
-		assertObject(tag().value(a("foo")).build().value()).json().is("['foo']");
+		assertObject(tag().description(a("foo")).build().description()).asJson().is("['foo']");
+		assertObject(tag().externalDocs(externalDocs().url("foo").build()).build().externalDocs().url()).asJson().is("'foo'");
+		assertObject(tag().name("foo").build().name()).asJson().is("'foo'");
+		assertObject(tag().value(a("foo")).build().value()).asJson().is("['foo']");
 	}
 
 	@Test
 	public void a16_ExternalDocs() throws Exception {
 		X1 x = A1.class.getAnnotation(X1.class);
 
-		assertObject(externalDocs().build().annotationType()).json().contains("ExternalDocs");
+		assertObject(externalDocs().build().annotationType()).asJson().contains("ExternalDocs");
 
 		assertTrue(ExternalDocsAnnotation.empty(x.externalDocs()));
 		assertTrue(ExternalDocsAnnotation.empty((ExternalDocs)null));
@@ -500,7 +500,7 @@ public class AnnotationUtils_Test {
 	public void a17_Schema() throws Exception {
 		X1 x = A1.class.getAnnotation(X1.class);
 
-		assertObject(schema().build().annotationType()).json().contains("Schema");
+		assertObject(schema().build().annotationType()).asJson().contains("Schema");
 
 		assertTrue(SchemaAnnotation.empty(x.schema()));
 		assertTrue(SchemaAnnotation.empty((Schema)null));
@@ -568,7 +568,7 @@ public class AnnotationUtils_Test {
 	public void a18_SubItems() throws Exception {
 		X1 x = A1.class.getAnnotation(X1.class);
 
-		assertObject(subItems().build().annotationType()).json().contains("SubItems");
+		assertObject(subItems().build().annotationType()).asJson().contains("SubItems");
 
 		assertTrue(SubItemsAnnotation.empty(x.subItems()));
 		assertTrue(SubItemsAnnotation.empty((SubItems)null));
@@ -614,7 +614,7 @@ public class AnnotationUtils_Test {
 	public void a19_Items() throws Exception {
 		X1 x = A1.class.getAnnotation(X1.class);
 
-		assertObject(items().build().annotationType()).json().contains("Items");
+		assertObject(items().build().annotationType()).asJson().contains("Items");
 
 		assertTrue(ItemsAnnotation.empty(x.items()));
 		assertTrue(ItemsAnnotation.empty((Items)null));
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/BodyAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/BodyAnnotation_Test.java
index b231459..e8c379b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/BodyAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/BodyAnnotation_Test.java
@@ -65,7 +65,7 @@ public class BodyAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "api:['api'],"
 				+ "d:['d'],"
@@ -120,9 +120,9 @@ public class BodyAnnotation_Test {
 		Body c2 = BodyAnnotation.create("a").on("b").build();
 		Body c4 = BodyAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ContactAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ContactAnnotation_Test.java
index 91824e2..90db001 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ContactAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ContactAnnotation_Test.java
@@ -42,7 +42,7 @@ public class ContactAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "email:'email',"
 				+ "name:'name',"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
index a30f2f3..6a075ee 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/FormDataAnnotation_Test.java
@@ -144,7 +144,7 @@ public class FormDataAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "_default:['default'],"
 				+ "_enum:['enum'],"
@@ -239,10 +239,10 @@ public class FormDataAnnotation_Test {
 		FormData c3 = FormDataAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		FormData c4 = FormDataAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasFormDataAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasFormDataAnnotation_Test.java
index 38d82bd..dceadc0 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasFormDataAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasFormDataAnnotation_Test.java
@@ -40,7 +40,7 @@ public class HasFormDataAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "n:'n',"
 				+ "name:'name',"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasQueryAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasQueryAnnotation_Test.java
index beb9647..e16f97b 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasQueryAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HasQueryAnnotation_Test.java
@@ -42,7 +42,7 @@ public class HasQueryAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "n:'n',"
 				+ "name:'name',"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
index 96f53c4..1142960 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/HeaderAnnotation_Test.java
@@ -144,7 +144,7 @@ public class HeaderAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "_default:['default'],"
 				+ "_enum:['enum'],"
@@ -239,10 +239,10 @@ public class HeaderAnnotation_Test {
 		Header c3 = HeaderAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Header c4 = HeaderAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/LicenseAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/LicenseAnnotation_Test.java
index 4ff0425..7b01f01 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/LicenseAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/LicenseAnnotation_Test.java
@@ -40,7 +40,7 @@ public class LicenseAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "name:'name',"
 				+ "url:'url',"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
index a07a2af..6e02942 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/PathAnnotation_Test.java
@@ -134,7 +134,7 @@ public class PathAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "_enum:['enum'],"
 				+ "aev:true,"
@@ -224,10 +224,10 @@ public class PathAnnotation_Test {
 		Path c3 = PathAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Path c4 = PathAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
index f07532f..5c46eea 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/QueryAnnotation_Test.java
@@ -144,7 +144,7 @@ public class QueryAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "_default:['default'],"
 				+ "_enum:['enum'],"
@@ -239,10 +239,10 @@ public class QueryAnnotation_Test {
 		Query c3 = QueryAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
 		Query c4 = QueryAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c3).json().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c3).asJson().contains("on:['"+CNAME+"$C1.f1','"+CNAME+"$C2.f2']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/RequestAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/RequestAnnotation_Test.java
index 7a1f1c8..f251a83 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/RequestAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/RequestAnnotation_Test.java
@@ -47,7 +47,7 @@ public class RequestAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on'],"
 				+ "onClass:['"+CNAME+"$X1'],"
@@ -92,8 +92,8 @@ public class RequestAnnotation_Test {
 		Request c1 = RequestAnnotation.create(C1.class).on(C2.class).build();
 		Request c2 = RequestAnnotation.create("a").on("b").build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
index 46de384..3d734a1 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseAnnotation_Test.java
@@ -70,7 +70,7 @@ public class ResponseAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "api:['api'],"
 				+ "code:[1],"
@@ -127,9 +127,9 @@ public class ResponseAnnotation_Test {
 		Response c2 = ResponseAnnotation.create("a").on("b").build();
 		Response c4 = ResponseAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseBodyAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseBodyAnnotation_Test.java
index 7e57ae0..76153e4 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseBodyAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseBodyAnnotation_Test.java
@@ -42,7 +42,7 @@ public class ResponseBodyAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on'],"
 				+ "onClass:['"+CNAME+"$X1']"
@@ -86,9 +86,9 @@ public class ResponseBodyAnnotation_Test {
 		ResponseBody c2 = ResponseBodyAnnotation.create("a").on("b").build();
 		ResponseBody c4 = ResponseBodyAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseHeaderAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseHeaderAnnotation_Test.java
index e7c55e3..bf67082 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseHeaderAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseHeaderAnnotation_Test.java
@@ -132,7 +132,7 @@ public class ResponseHeaderAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "'$ref':'$ref',"
 				+ "_default:['default'],"
@@ -220,9 +220,9 @@ public class ResponseHeaderAnnotation_Test {
 		ResponseHeader c2 = ResponseHeaderAnnotation.create("a").on("b").build();
 		ResponseHeader c4 = ResponseHeaderAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseStatusAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseStatusAnnotation_Test.java
index f288c59..d1abe84 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseStatusAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/ResponseStatusAnnotation_Test.java
@@ -42,7 +42,7 @@ public class ResponseStatusAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "on:['on'],"
 				+ "onClass:['"+CNAME+"$X1']"
@@ -86,9 +86,9 @@ public class ResponseStatusAnnotation_Test {
 		ResponseStatus c2 = ResponseStatusAnnotation.create("a").on("b").build();
 		ResponseStatus c4 = ResponseStatusAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
 
-		assertObject(c1).json().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
-		assertObject(c2).json().contains("on:['a','b']");
-		assertObject(c4).json().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
+		assertObject(c1).asJson().contains("on:['"+CNAME+"$C1','"+CNAME+"$C2']");
+		assertObject(c2).asJson().contains("on:['a','b']");
+		assertObject(c4).asJson().contains("on:['"+CNAME+"$C1.m1()','"+CNAME+"$C2.m2()']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/TagAnnotation_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/TagAnnotation_Test.java
index e713760..6afcaf3 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/TagAnnotation_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/annotation/TagAnnotation_Test.java
@@ -43,7 +43,7 @@ public class TagAnnotation_Test {
 
 	@Test
 	public void a01_basic() {
-		assertObject(a1).json().is(""
+		assertObject(a1).asJson().is(""
 			+ "{"
 				+ "description:['description'],"
 				+ "externalDocs:{description:[],url:'',value:[]},"
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/Accept_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/Accept_Test.java
index bc2f770..a440cb7 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/Accept_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/Accept_Test.java
@@ -66,7 +66,7 @@ public class Accept_Test {
 		assertObject(new Accept((String)null).asMediaRanges()).isNotNull();
 		assertInteger(new Accept((String)null).match(AList.of(MediaType.JSON))).is(-1);
 		assertObject(new Accept((String)null).getRange(0)).isNull();
-		assertObject(new Accept(MediaType.JSON).getRange(0)).string().is("application/json");
+		assertObject(new Accept(MediaType.JSON).getRange(0)).asString().is("application/json");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
index a6343c5..243a570 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
@@ -73,19 +73,19 @@ public class BasicDateHeader_Test {
 
 	@Test
 	public void a02_asCalendar() throws Exception {
-		assertObject(of(HEADER,VALUE).asCalendar()).string(Calendar.class, x->calendarString(x)).is("1994-10-29T19:43:31Z");
+		assertObject(of(HEADER,VALUE).asCalendar()).asString(Calendar.class, x->calendarString(x)).is("1994-10-29T19:43:31Z");
 		assertObject(header(HEADER,null).asCalendar()).doesNotExist();
 	}
 
 	@Test
 	public void a03_asDate() throws Exception {
-		assertObject(of(HEADER,VALUE).asDate()).string().contains("1994");
+		assertObject(of(HEADER,VALUE).asDate()).asString().contains("1994");
 		assertObject(header(HEADER,null).asDate()).doesNotExist();
 	}
 
 	@Test
 	public void a04_assertZonedDateTime() throws Exception {
-		of(HEADER,VALUE).assertZonedDateTime().string().is("1994-10-29T19:43:31Z");
+		of(HEADER,VALUE).assertZonedDateTime().asString().is("1994-10-29T19:43:31Z");
 		header(HEADER,null).assertZonedDateTime().doesNotExist();
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader_Test.java
index 1b1ffea..155f2db 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader_Test.java
@@ -97,8 +97,8 @@ public class BasicMediaRangeArrayHeader_Test {
 
 	@Test
 	public void a05_getRanges() throws Exception {
-		assertObject(Accept.of("text/foo,text/bar").getRanges()).json().is("['text/foo','text/bar']");
-		assertObject(new Accept((String)null).getRanges()).json().is("[]");
+		assertObject(Accept.of("text/foo,text/bar").getRanges()).asJson().is("['text/foo','text/bar']");
+		assertObject(new Accept((String)null).getRanges()).asJson().is("[]");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaTypeHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaTypeHeader_Test.java
index a987d1b..dc96c78 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaTypeHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicMediaTypeHeader_Test.java
@@ -89,8 +89,8 @@ public class BasicMediaTypeHeader_Test {
 
 	@Test
 	public void a05_getSubTypes() throws Exception {
-		assertObject(ContentType.of("text/foo+bar").getSubTypes()).json().is("['foo','bar']");
-		assertObject(new ContentType((String)null).getSubTypes()).json().is("['*']");
+		assertObject(ContentType.of("text/foo+bar").getSubTypes()).asJson().is("['foo','bar']");
+		assertObject(new ContentType((String)null).getSubTypes()).asJson().is("['*']");
 	}
 
 	@Test
@@ -108,8 +108,8 @@ public class BasicMediaTypeHeader_Test {
 
 	@Test
 	public void a08_getParameters() throws Exception {
-		assertObject(ContentType.of("text/foo;x=1;y=2").getParameters()).json().is("['x=1','y=2']");
-		assertObject(new ContentType((String)null).getParameters()).json().is("[]");
+		assertObject(ContentType.of("text/foo;x=1;y=2").getParameters()).asJson().is("['x=1','y=2']");
+		assertObject(new ContentType((String)null).getParameters()).asJson().is("[]");
 	}
 
 	@Test
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader_Test.java
index 63ba39a..c6381a7 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader_Test.java
@@ -75,7 +75,7 @@ public class BasicStringRangeArrayHeader_Test {
 
 	@Test
 	public void a03_getRanges() throws Exception {
-		assertObject(of(HEADER,"foo,bar").getRanges()).json().is("['foo','bar']");
+		assertObject(of(HEADER,"foo,bar").getRanges()).asJson().is("['foo','bar']");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
index d665445..75db274 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
@@ -557,89 +557,89 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setInt3dArray(int[][][] x) {
-					assertObject(x).json().is("[[[1,2],null],null]");
+					assertObject(x).asJson().is("[[[1,2],null],null]");
 				}
 
 				@Override
 				public void setInteger3dArray(Integer[][][] x) {
-					assertObject(x).json().is("[[[1,null],null],null]");
+					assertObject(x).asJson().is("[[[1,null],null],null]");
 				}
 
 				@Override
 				public void setString3dArray(String[][][] x) {
-					assertObject(x).json().is("[[['foo',null],null],null]");
+					assertObject(x).asJson().is("[[['foo',null],null],null]");
 				}
 
 				@Override
 				public void setIntegerList(List<Integer> x) {
-					assertObject(x).json().is("[1,null]");
+					assertObject(x).asJson().is("[1,null]");
 					assertObject(x.get(0)).isType(Integer.class);
 				}
 
 				@Override
 				public void setInteger3dList(List<List<List<Integer>>> x) {
-					assertObject(x).json().is("[[[1,null],null],null]");
+					assertObject(x).asJson().is("[[[1,null],null],null]");
 					assertObject(x.get(0).get(0).get(0)).isType(Integer.class);
 				}
 
 				@Override
 				public void setInteger1d3dList(List<Integer[][][]> x) {
-					assertObject(x).json().is("[[[[1,null],null],null],null]");
+					assertObject(x).asJson().is("[[[[1,null],null],null],null]");
 					assertObject(x.get(0)).isType(Integer[][][].class);
 					assertObject(x.get(0)[0][0][0]).isType(Integer.class);
 				}
 
 				@Override
 				public void setInt1d3dList(List<int[][][]> x) {
-					assertObject(x).json().is("[[[[1,2],null],null],null]");
+					assertObject(x).asJson().is("[[[[1,2],null],null],null]");
 					assertObject(x.get(0)).isType(int[][][].class);
 				}
 
 				@Override
 				public void setStringList(List<String> x) {
-					assertObject(x).json().is("['foo','bar',null]");
+					assertObject(x).asJson().is("['foo','bar',null]");
 				}
 
 				// Beans
 
 				@Override
 				public void setBean(ABean x) {
-					assertObject(x).json().is("{a:1,b:'foo'}");
+					assertObject(x).asJson().is("{a:1,b:'foo'}");
 				}
 
 				@Override
 				public void setBean3dArray(ABean[][][] x) {
-					assertObject(x).json().is("[[[{a:1,b:'foo'},null],null],null]");
+					assertObject(x).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 				}
 
 				@Override
 				public void setBeanList(List<ABean> x) {
-					assertObject(x).json().is("[{a:1,b:'foo'}]");
+					assertObject(x).asJson().is("[{a:1,b:'foo'}]");
 				}
 
 				@Override
 				public void setBean1d3dList(List<ABean[][][]> x) {
-					assertObject(x).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+					assertObject(x).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 				}
 
 				@Override
 				public void setBeanMap(Map<String,ABean> x) {
-					assertObject(x).json().is("{foo:{a:1,b:'foo'}}");
+					assertObject(x).asJson().is("{foo:{a:1,b:'foo'}}");
 				}
 
 				@Override
 				public void setBeanListMap(Map<String,List<ABean>> x) {
-					assertObject(x).json().is("{foo:[{a:1,b:'foo'}]}");
+					assertObject(x).asJson().is("{foo:[{a:1,b:'foo'}]}");
 				}
 
 				@Override
 				public void setBean1d3dListMap(Map<String,List<ABean[][][]>> x) {
-					assertObject(x).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+					assertObject(x).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 				}
 
 				@Override
 				public void setBeanListMapIntegerKeys(Map<Integer,List<ABean>> x) {
-					assertObject(x).json().is("{'1':[{a:1,b:'foo'}]}");  // Note: JsonSerializer serializes key as string.
+					assertObject(x).asJson().is("{'1':[{a:1,b:'foo'}]}");  // Note: JsonSerializer serializes key as string.
 					assertObject(x.keySet().iterator().next()).isType(Integer.class);
 				}
 
@@ -647,49 +647,49 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setTypedBean(TypedBean x) {
-					assertObject(x).json().is("{a:1,b:'foo'}");
+					assertObject(x).asJson().is("{a:1,b:'foo'}");
 					assertObject(x).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBean3dArray(TypedBean[][][] x) {
-					assertObject(x).json().is("[[[{a:1,b:'foo'},null],null],null]");
+					assertObject(x).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 					assertObject(x[0][0][0]).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBeanList(List<TypedBean> x) {
-					assertObject(x).json().is("[{a:1,b:'foo'}]");
+					assertObject(x).asJson().is("[{a:1,b:'foo'}]");
 					assertObject(x.get(0)).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBean1d3dList(List<TypedBean[][][]> x) {
-					assertObject(x).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+					assertObject(x).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 					assertObject(x.get(0)[0][0][0]).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBeanMap(Map<String,TypedBean> x) {
-					assertObject(x).json().is("{foo:{a:1,b:'foo'}}");
+					assertObject(x).asJson().is("{foo:{a:1,b:'foo'}}");
 					assertObject(x.get("foo")).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBeanListMap(Map<String,List<TypedBean>> x) {
-					assertObject(x).json().is("{foo:[{a:1,b:'foo'}]}");
+					assertObject(x).asJson().is("{foo:[{a:1,b:'foo'}]}");
 					assertObject(x.get("foo").get(0)).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBean1d3dListMap(Map<String,List<TypedBean[][][]>> x) {
-					assertObject(x).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+					assertObject(x).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 					assertObject(x.get("foo").get(0)[0][0][0]).isType(TypedBeanImpl.class);
 				}
 
 				@Override
 				public void setTypedBeanListMapIntegerKeys(Map<Integer,List<TypedBean>> x) {
-					assertObject(x).json().is("{'1':[{a:1,b:'foo'}]}");  // Note: JsonSerializer serializes key as string.
+					assertObject(x).asJson().is("{'1':[{a:1,b:'foo'}]}");  // Note: JsonSerializer serializes key as string.
 					assertObject(x.get(1).get(0)).isType(TypedBeanImpl.class);
 				}
 
@@ -702,13 +702,13 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setSwappedPojo3dArray(SwappedPojo[][][] x) {
-					assertObject(x).json().is("[[['"+SWAP+"',null],null],null]");
+					assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertTrue(x[0][0][0].wasUnswapped);
 				}
 
 				@Override
 				public void setSwappedPojoMap(Map<SwappedPojo,SwappedPojo> x) {
-					assertObject(x).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+					assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					Map.Entry<SwappedPojo,SwappedPojo> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue().wasUnswapped);
@@ -716,7 +716,7 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setSwappedPojo3dMap(Map<SwappedPojo,SwappedPojo[][][]> x) {
-					assertObject(x).json().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
+					assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
 					Map.Entry<SwappedPojo,SwappedPojo[][][]> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue()[0][0][0].wasUnswapped);
@@ -731,13 +731,13 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setImplicitSwappedPojo3dArray(ImplicitSwappedPojo[][][] x) {
-					assertObject(x).json().is("[[['"+SWAP+"',null],null],null]");
+					assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertTrue(x[0][0][0].wasUnswapped);
 				}
 
 				@Override
 				public void setImplicitSwappedPojoMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x) {
-					assertObject(x).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+					assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue().wasUnswapped);
@@ -745,7 +745,7 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setImplicitSwappedPojo3dMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x) {
-					assertObject(x).json().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
+					assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
 					Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue()[0][0][0].wasUnswapped);
@@ -760,30 +760,30 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setEnum3d(TestEnum[][][] x) {
-					assertObject(x).json().is("[[['TWO',null],null],null]");
+					assertObject(x).asJson().is("[[['TWO',null],null],null]");
 				}
 
 				@Override
 				public void setEnumList(List<TestEnum> x) {
-					assertObject(x).json().is("['TWO',null]");
+					assertObject(x).asJson().is("['TWO',null]");
 					assertObject(x.get(0)).isType(TestEnum.class);
 				}
 
 				@Override
 				public void setEnum3dList(List<List<List<TestEnum>>> x) {
-					assertObject(x).json().is("[[['TWO',null],null],null]");
+					assertObject(x).asJson().is("[[['TWO',null],null],null]");
 					assertObject(x.get(0).get(0).get(0)).isType(TestEnum.class);
 				}
 
 				@Override
 				public void setEnum1d3dList(List<TestEnum[][][]> x) {
-					assertObject(x).json().is("[[[['TWO',null],null],null],null]");
+					assertObject(x).asJson().is("[[[['TWO',null],null],null],null]");
 					assertObject(x.get(0)).isType(TestEnum[][][].class);
 				}
 
 				@Override
 				public void setEnumMap(Map<TestEnum,TestEnum> x) {
-					assertObject(x).json().is("{ONE:'TWO'}");
+					assertObject(x).asJson().is("{ONE:'TWO'}");
 					Map.Entry<TestEnum,TestEnum> e = x.entrySet().iterator().next();
 					assertObject(e.getKey()).isType(TestEnum.class);
 					assertObject(e.getValue()).isType(TestEnum.class);
@@ -791,7 +791,7 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setEnum3dArrayMap(Map<TestEnum,TestEnum[][][]> x) {
-					assertObject(x).json().is("{ONE:[[['TWO',null],null],null]}");
+					assertObject(x).asJson().is("{ONE:[[['TWO',null],null],null]}");
 					Map.Entry<TestEnum,TestEnum[][][]> e = x.entrySet().iterator().next();
 					assertObject(e.getKey()).isType(TestEnum.class);
 					assertObject(e.getValue()).isType(TestEnum[][][].class);
@@ -799,7 +799,7 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setEnum1d3dListMap(Map<TestEnum,List<TestEnum[][][]>> x) {
-					assertObject(x).json().is("{ONE:[[[['TWO',null],null],null],null]}");
+					assertObject(x).asJson().is("{ONE:[[[['TWO',null],null],null],null]}");
 					Map.Entry<TestEnum,List<TestEnum[][][]>> e = x.entrySet().iterator().next();
 					assertObject(e.getKey()).isType(TestEnum.class);
 					assertObject(e.getValue().get(0)).isType(TestEnum[][][].class);
@@ -811,107 +811,107 @@ public class RrpcInterfaceTest {
 
 				@Override
 				public void setMultiParamsInts(int x1,int[][][] x2,int[][][] x2n,List<int[][][]> x3,List<int[][][]> x3n) {
-					assertObject((Object) x1).json().is("1");
-					assertObject(x2).json().is("[[[1,2],null],null]");
+					assertObject((Object) x1).asJson().is("1");
+					assertObject(x2).asJson().is("[[[1,2],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[[1,2],null],null],null]");
+					assertObject(x3).asJson().is("[[[[1,2],null],null],null]");
 					assertObject(x3.get(0)).isType(int[][][].class);
 					assertNull(x3n);
 				}
 
 				@Override
 				public void setMultiParamsInteger(Integer x1,Integer x1n,Integer[][][] x2,Integer[][][] x2n,List<Integer[][][]> x3,List<Integer[][][]> x3n) {
-					assertObject(x1).json().is("1");
-					assertObject(x2).json().is("[[[1,null],null],null]");
+					assertObject(x1).asJson().is("1");
+					assertObject(x2).asJson().is("[[[1,null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[[1,null],null],null],null]");
+					assertObject(x3).asJson().is("[[[[1,null],null],null],null]");
 					assertObject(x3.get(0)).isType(Integer[][][].class);
 					assertNull(x3n);
 				}
 
 				@Override
 				public void setMultiParamsFloat(float x1,float[][][] x2,float[][][] x2n,List<float[][][]> x3,List<float[][][]> x3n) {
-					assertObject((Object) x1).json().is("1.0");
-					assertObject(x2).json().is("[[[1.0,2.0],null],null]");
+					assertObject((Object) x1).asJson().is("1.0");
+					assertObject(x2).asJson().is("[[[1.0,2.0],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[[1.0,2.0],null],null],null]");
+					assertObject(x3).asJson().is("[[[[1.0,2.0],null],null],null]");
 					assertObject(x3.get(0)).isType(float[][][].class);
 					assertNull(x3n);
 				}
 
 				@Override
 				public void setMultiParamsFloatObject(Float x1,Float x1n,Float[][][] x2,Float[][][] x2n,List<Float[][][]> x3,List<Float[][][]> x3n) {
-					assertObject(x1).json().is("1.0");
-					assertObject(x2).json().is("[[[1.0,null],null],null]");
+					assertObject(x1).asJson().is("1.0");
+					assertObject(x2).asJson().is("[[[1.0,null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[[1.0,null],null],null],null]");
+					assertObject(x3).asJson().is("[[[[1.0,null],null],null],null]");
 					assertObject(x3.get(0)).isType(Float[][][].class);
 					assertNull(x3n);
 				}
 
 				@Override
 				public void setMultiParamsString(String x1,String[][][] x2,String[][][] x2n,List<String[][][]> x3,List<String[][][]> x3n) {
-					assertObject(x1).json().is("'foo'");
-					assertObject(x2).json().is("[[['foo',null],null],null]");
+					assertObject(x1).asJson().is("'foo'");
+					assertObject(x2).asJson().is("[[['foo',null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[['foo',null],null],null],null]");
+					assertObject(x3).asJson().is("[[[['foo',null],null],null],null]");
 					assertObject(x3.get(0)).isType(String[][][].class);
 					assertNull(x3n);
 				}
 
 				@Override
 				public void setMultiParamsBean(ABean x1,ABean[][][] x2,ABean[][][] x2n,List<ABean[][][]> x3,List<ABean[][][]> x3n,Map<String,ABean> x4,Map<String,ABean> x4n,Map<String,List<ABean[][][]>> x5,Map<String,List<ABean[][][]>> x5n) {
-					assertObject(x1).json().is("{a:1,b:'foo'}");
-					assertObject(x2).json().is("[[[{a:1,b:'foo'},null],null],null]");
+					assertObject(x1).asJson().is("{a:1,b:'foo'}");
+					assertObject(x2).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+					assertObject(x3).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 					assertObject(x3.get(0)).isType(ABean[][][].class);
 					assertNull(x3n);
-					assertObject(x4).json().is("{foo:{a:1,b:'foo'}}");
+					assertObject(x4).asJson().is("{foo:{a:1,b:'foo'}}");
 					assertNull(x4n);
-					assertObject(x5).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+					assertObject(x5).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 					assertNull(x5n);
 				}
 
 				@Override
 				public void setMultiParamsSwappedPojo(SwappedPojo x1,SwappedPojo[][][] x2,SwappedPojo[][][] x2n,List<SwappedPojo[][][]> x3,List<SwappedPojo[][][]> x3n,Map<SwappedPojo,SwappedPojo> x4,Map<SwappedPojo,SwappedPojo> x4n,Map<SwappedPojo,List<SwappedPojo[][][]>> x5,Map<SwappedPojo,List<SwappedPojo[][][]>> x5n) {
-					assertObject(x1).json().is("'"+SWAP+"'");
-					assertObject(x2).json().is("[[['"+SWAP+"',null],null],null]");
+					assertObject(x1).asJson().is("'"+SWAP+"'");
+					assertObject(x2).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[['"+SWAP+"',null],null],null],null]");
+					assertObject(x3).asJson().is("[[[['"+SWAP+"',null],null],null],null]");
 					assertObject(x3.get(0)).isType(SwappedPojo[][][].class);
 					assertNull(x3n);
-					assertObject(x4).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+					assertObject(x4).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					assertNull(x4n);
-					assertObject(x5).json().is("{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}");
+					assertObject(x5).asJson().is("{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}");
 					assertNull(x5n);
 				}
 
 				@Override
 				public void setMultiParamsImplicitSwappedPojo(ImplicitSwappedPojo x1,ImplicitSwappedPojo[][][] x2,ImplicitSwappedPojo[][][] x2n,List<ImplicitSwappedPojo[][][]> x3,List<ImplicitSwappedPojo[][][]> x3n,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4n,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5n) {
-					assertObject(x1).json().is("'"+SWAP+"'");
-					assertObject(x2).json().is("[[['"+SWAP+"',null],null],null]");
+					assertObject(x1).asJson().is("'"+SWAP+"'");
+					assertObject(x2).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[['"+SWAP+"',null],null],null],null]");
+					assertObject(x3).asJson().is("[[[['"+SWAP+"',null],null],null],null]");
 					assertObject(x3.get(0)).isType(ImplicitSwappedPojo[][][].class);
 					assertNull(x3n);
-					assertObject(x4).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+					assertObject(x4).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					assertNull(x4n);
-					assertObject(x5).json().is("{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}");
+					assertObject(x5).asJson().is("{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}");
 					assertNull(x5n);
 				}
 
 				@Override
 				public void setMultiParamsEnum(TestEnum x1,TestEnum[][][] x2,TestEnum[][][] x2n,List<TestEnum[][][]> x3,List<TestEnum[][][]> x3n,Map<TestEnum,TestEnum> x4,Map<TestEnum,TestEnum> x4n,Map<TestEnum,List<TestEnum[][][]>> x5,Map<TestEnum,List<TestEnum[][][]>> x5n) {
-					assertObject(x1).json().is("'TWO'");
-					assertObject(x2).json().is("[[['TWO',null],null],null]");
+					assertObject(x1).asJson().is("'TWO'");
+					assertObject(x2).asJson().is("[[['TWO',null],null],null]");
 					assertNull(x2n);
-					assertObject(x3).json().is("[[[['TWO',null],null],null],null]");
+					assertObject(x3).asJson().is("[[[['TWO',null],null],null],null]");
 					assertObject(x3.get(0)).isType(TestEnum[][][].class);
 					assertNull(x3n);
-					assertObject(x4).json().is("{ONE:'TWO'}");
+					assertObject(x4).asJson().is("{ONE:'TWO'}");
 					assertNull(x4n);
-					assertObject(x5).json().is("{ONE:[[[['TWO',null],null],null],null]}");
+					assertObject(x5).asJson().is("{ONE:[[[['TWO',null],null],null],null]}");
 					assertNull(x5n);
 				}
 			};
@@ -977,50 +977,50 @@ public class RrpcInterfaceTest {
 
 	@Test
 	public void a09_returnInt3dArray() {
-		assertObject(proxy.returnInt3dArray()).json().is("[[[1,2],null],null]");
+		assertObject(proxy.returnInt3dArray()).asJson().is("[[[1,2],null],null]");
 	}
 
 	@Test
 	public void a10_returnInteger3dArray() {
-		assertObject(proxy.returnInteger3dArray()).json().is("[[[1,null],null],null]");
+		assertObject(proxy.returnInteger3dArray()).asJson().is("[[[1,null],null],null]");
 	}
 
 	@Test
 	public void a11_returnString3dArray() {
-		assertObject(proxy.returnString3dArray()).json().is("[[['foo','bar',null],null],null]");
+		assertObject(proxy.returnString3dArray()).asJson().is("[[['foo','bar',null],null],null]");
 	}
 
 	@Test
 	public void a12_returnIntegerList() {
 		List<Integer> x = proxy.returnIntegerList();
-		assertObject(x).json().is("[1,null]");
+		assertObject(x).asJson().is("[1,null]");
 		assertObject(x.get(0)).isType(Integer.class);
 	}
 
 	@Test
 	public void a13_returnInteger3dList() {
 		List<List<List<Integer>>> x = proxy.returnInteger3dList();
-		assertObject(x).json().is("[[[1,null],null],null]");
+		assertObject(x).asJson().is("[[[1,null],null],null]");
 		assertObject(x.get(0).get(0).get(0)).isType(Integer.class);
 	}
 
 	@Test
 	public void a14_returnInteger1d3dList() {
 		List<Integer[][][]> x = proxy.returnInteger1d3dList();
-		assertObject(x).json().is("[[[[1,null],null],null],null]");
+		assertObject(x).asJson().is("[[[[1,null],null],null],null]");
 		assertObject(x.get(0)[0][0][0]).isType(Integer.class);
 	}
 
 	@Test
 	public void a15_returnInt1d3dList() {
 		List<int[][][]> x = proxy.returnInt1d3dList();
-		assertObject(x).json().is("[[[[1,2],null],null],null]");
+		assertObject(x).asJson().is("[[[[1,2],null],null],null]");
 		assertObject(x.get(0)).isType(int[][][].class);
 	}
 
 	@Test
 	public void a16_returnStringList() {
-		assertObject(proxy.returnStringList()).json().is("['foo','bar',null]");
+		assertObject(proxy.returnStringList()).asJson().is("['foo','bar',null]");
 	}
 
 	// Beans
@@ -1028,49 +1028,49 @@ public class RrpcInterfaceTest {
 	@Test
 	public void b01_returnBean() {
 		ABean x = proxy.returnBean();
-		assertObject(x).json().is("{a:1,b:'foo'}");
+		assertObject(x).asJson().is("{a:1,b:'foo'}");
 		assertObject(x).isType(ABean.class);
 	}
 
 	@Test
 	public void b02_returnBean3dArray() {
 		ABean[][][] x = proxy.returnBean3dArray();
-		assertObject(x).json().is("[[[{a:1,b:'foo'},null],null],null]");
+		assertObject(x).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 		assertObject(x[0][0][0]).isType(ABean.class);
 	}
 
 	@Test
 	public void b03_returnBeanList() {
 		List<ABean> x = proxy.returnBeanList();
-		assertObject(x).json().is("[{a:1,b:'foo'}]");
+		assertObject(x).asJson().is("[{a:1,b:'foo'}]");
 		assertObject(x.get(0)).isType(ABean.class);
 	}
 
 	@Test
 	public void b04_returnBean1d3dList() {
 		List<ABean[][][]> x = proxy.returnBean1d3dList();
-		assertObject(x).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+		assertObject(x).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 		assertObject(x.get(0)[0][0][0]).isType(ABean.class);
 	}
 
 	@Test
 	public void b05_returnBeanMap() {
 		Map<String,ABean> x = proxy.returnBeanMap();
-		assertObject(x).json().is("{foo:{a:1,b:'foo'}}");
+		assertObject(x).asJson().is("{foo:{a:1,b:'foo'}}");
 		assertObject(x.get("foo")).isType(ABean.class);
 	}
 
 	@Test
 	public void b06_returnBeanListMap() {
 		Map<String,List<ABean>> x = proxy.returnBeanListMap();
-		assertObject(x).json().is("{foo:[{a:1,b:'foo'}]}");
+		assertObject(x).asJson().is("{foo:[{a:1,b:'foo'}]}");
 		assertObject(x.get("foo").get(0)).isType(ABean.class);
 	}
 
 	@Test
 	public void b07_returnBean1d3dListMap() {
 		Map<String,List<ABean[][][]>> x = proxy.returnBean1d3dListMap();
-		assertObject(x).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+		assertObject(x).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 		assertObject(x.get("foo").get(0)[0][0][0]).isType(ABean.class);
 	}
 
@@ -1078,7 +1078,7 @@ public class RrpcInterfaceTest {
 	public void b08_returnBeanListMapIntegerKeys() {
 		// Note: JsonSerializer serializes key as string.
 		Map<Integer,List<ABean>> x = proxy.returnBeanListMapIntegerKeys();
-		assertObject(x).json().is("{'1':[{a:1,b:'foo'}]}");
+		assertObject(x).asJson().is("{'1':[{a:1,b:'foo'}]}");
 		assertObject(x.keySet().iterator().next()).isType(Integer.class);
 	}
 
@@ -1087,49 +1087,49 @@ public class RrpcInterfaceTest {
 	@Test
 	public void c01_returnTypedBean() {
 		TypedBean x = proxy.returnTypedBean();
-		assertObject(x).json().is("{a:1,b:'foo'}");
+		assertObject(x).asJson().is("{a:1,b:'foo'}");
 		assertObject(x).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c02_returnTypedBean3dArray() {
 		TypedBean[][][] x = proxy.returnTypedBean3dArray();
-		assertObject(x).json().is("[[[{a:1,b:'foo'},null],null],null]");
+		assertObject(x).asJson().is("[[[{a:1,b:'foo'},null],null],null]");
 		assertObject(x[0][0][0]).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c03_returnTypedBeanList() {
 		List<TypedBean> x = proxy.returnTypedBeanList();
-		assertObject(x).json().is("[{a:1,b:'foo'}]");
+		assertObject(x).asJson().is("[{a:1,b:'foo'}]");
 		assertObject(x.get(0)).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c04_returnTypedBean1d3dList() {
 		List<TypedBean[][][]> x = proxy.returnTypedBean1d3dList();
-		assertObject(x).json().is("[[[[{a:1,b:'foo'},null],null],null],null]");
+		assertObject(x).asJson().is("[[[[{a:1,b:'foo'},null],null],null],null]");
 		assertObject(x.get(0)[0][0][0]).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c05_returnTypedBeanMap() {
 		Map<String,TypedBean> x = proxy.returnTypedBeanMap();
-		assertObject(x).json().is("{foo:{a:1,b:'foo'}}");
+		assertObject(x).asJson().is("{foo:{a:1,b:'foo'}}");
 		assertObject(x.get("foo")).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c06_returnTypedBeanListMap() {
 		Map<String,List<TypedBean>> x = proxy.returnTypedBeanListMap();
-		assertObject(x).json().is("{foo:[{a:1,b:'foo'}]}");
+		assertObject(x).asJson().is("{foo:[{a:1,b:'foo'}]}");
 		assertObject(x.get("foo").get(0)).isType(TypedBeanImpl.class);
 	}
 
 	@Test
 	public void c07_returnTypedBean1d3dListMap() {
 		Map<String,List<TypedBean[][][]>> x = proxy.returnTypedBean1d3dListMap();
-		assertObject(x).json().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
+		assertObject(x).asJson().is("{foo:[[[[{a:1,b:'foo'},null],null],null],null]}");
 		assertObject(x.get("foo").get(0)[0][0][0]).isType(TypedBeanImpl.class);
 	}
 
@@ -1137,7 +1137,7 @@ public class RrpcInterfaceTest {
 	public void c08_returnTypedBeanListMapIntegerKeys() {
 		// Note: JsonSerializer serializes key as string.
 		Map<Integer,List<TypedBean>> x = proxy.returnTypedBeanListMapIntegerKeys();
-		assertObject(x).json().is("{'1':[{a:1,b:'foo'}]}");
+		assertObject(x).asJson().is("{'1':[{a:1,b:'foo'}]}");
 		assertObject(x.get(1).get(0)).isType(TypedBeanImpl.class);
 	}
 
@@ -1146,21 +1146,21 @@ public class RrpcInterfaceTest {
 	@Test
 	public void d01_returnSwappedPojo() {
 		SwappedPojo x = proxy.returnSwappedPojo();
-		assertObject(x).json().is("'"+SWAP+"'");
+		assertObject(x).asJson().is("'"+SWAP+"'");
 		assertTrue(x.wasUnswapped);
 	}
 
 	@Test
 	public void d02_returnSwappedPojo3dArray() {
 		SwappedPojo[][][] x = proxy.returnSwappedPojo3dArray();
-		assertObject(x).json().is("[[['"+SWAP+"',null],null],null]");
+		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
 	@Test
 	public void d03_returnSwappedPojoMap() {
 		Map<SwappedPojo,SwappedPojo> x = proxy.returnSwappedPojoMap();
-		assertObject(x).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 		Map.Entry<SwappedPojo,SwappedPojo> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
@@ -1169,7 +1169,7 @@ public class RrpcInterfaceTest {
 	@Test
 	public void d04_returnSwappedPojo3dMap() {
 		Map<SwappedPojo,SwappedPojo[][][]> x = proxy.returnSwappedPojo3dMap();
-		assertObject(x).json().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
+		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
 		Map.Entry<SwappedPojo,SwappedPojo[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
@@ -1180,21 +1180,21 @@ public class RrpcInterfaceTest {
 	@Test
 	public void e01_returnImplicitSwappedPojo() {
 		ImplicitSwappedPojo x = proxy.returnImplicitSwappedPojo();
-		assertObject(x).json().is("'"+SWAP+"'");
+		assertObject(x).asJson().is("'"+SWAP+"'");
 		assertTrue(x.wasUnswapped);
 	}
 
 	@Test
 	public void e02_returnImplicitSwappedPojo3dArray() {
 		ImplicitSwappedPojo[][][] x = proxy.returnImplicitSwappedPojo3dArray();
-		assertObject(x).json().is("[[['"+SWAP+"',null],null],null]");
+		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
 	@Test
 	public void e03_returnImplicitSwappedPojoMap() {
 		Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x = proxy.returnImplicitSwappedPojoMap();
-		assertObject(x).json().is("{'"+SWAP+"':'"+SWAP+"'}");
+		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
@@ -1203,7 +1203,7 @@ public class RrpcInterfaceTest {
 	@Test
 	public void e04_returnImplicitSwappedPojo3dMap() {
 		Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x = proxy.returnImplicitSwappedPojo3dMap();
-		assertObject(x).json().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
+		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
 		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
@@ -1214,41 +1214,41 @@ public class RrpcInterfaceTest {
 	@Test
 	public void f01_returnEnum() {
 		TestEnum x = proxy.returnEnum();
-		assertObject(x).json().is("'TWO'");
+		assertObject(x).asJson().is("'TWO'");
 	}
 
 	@Test
 	public void f02_returnEnum3d() {
 		TestEnum[][][] x = proxy.returnEnum3d();
-		assertObject(x).json().is("[[['TWO',null],null],null]");
+		assertObject(x).asJson().is("[[['TWO',null],null],null]");
 		assertObject(x[0][0][0]).isType(TestEnum.class);
 	}
 
 	@Test
 	public void f03_returnEnumList() {
 		List<TestEnum> x = proxy.returnEnumList();
-		assertObject(x).json().is("['TWO',null]");
+		assertObject(x).asJson().is("['TWO',null]");
 		assertObject(x.get(0)).isType(TestEnum.class);
 	}
 
 	@Test
 	public void f04_returnEnum3dList() {
 		List<List<List<TestEnum>>> x = proxy.returnEnum3dList();
-		assertObject(x).json().is("[[['TWO',null],null],null]");
+		assertObject(x).asJson().is("[[['TWO',null],null],null]");
 		assertObject(x.get(0).get(0).get(0)).isType(TestEnum.class);
 	}
 
 	@Test
 	public void f05_returnEnum1d3dList() {
 		List<TestEnum[][][]> x = proxy.returnEnum1d3dList();
-		assertObject(x).json().is("[[[['TWO',null],null],null],null]");
+		assertObject(x).asJson().is("[[[['TWO',null],null],null],null]");
 		assertObject(x.get(0)).isType(TestEnum[][][].class);
 	}
 
 	@Test
 	public void f06_returnEnumMap() {
 		Map<TestEnum,TestEnum> x = proxy.returnEnumMap();
-		assertObject(x).json().is("{ONE:'TWO'}");
+		assertObject(x).asJson().is("{ONE:'TWO'}");
 		Map.Entry<TestEnum,TestEnum> e = x.entrySet().iterator().next();
 		assertObject(e.getKey()).isType(TestEnum.class);
 		assertObject(e.getValue()).isType(TestEnum.class);
@@ -1257,7 +1257,7 @@ public class RrpcInterfaceTest {
 	@Test
 	public void f07_returnEnum3dArrayMap() {
 		Map<TestEnum,TestEnum[][][]> x = proxy.returnEnum3dArrayMap();
-		assertObject(x).json().is("{ONE:[[['TWO',null],null],null]}");
+		assertObject(x).asJson().is("{ONE:[[['TWO',null],null],null]}");
 		Map.Entry<TestEnum,TestEnum[][][]> e = x.entrySet().iterator().next();
 		assertObject(e.getKey()).isType(TestEnum.class);
 		assertObject(e.getValue()).isType(TestEnum[][][].class);
@@ -1266,7 +1266,7 @@ public class RrpcInterfaceTest {
 	@Test
 	public void f08_returnEnum1d3dListMap() {
 		Map<TestEnum,List<TestEnum[][][]>> x = proxy.returnEnum1d3dListMap();
-		assertObject(x).json().is("{ONE:[[[['TWO',null],null],null],null]}");
+		assertObject(x).asJson().is("{ONE:[[[['TWO',null],null],null],null]}");
 		assertObject(x.get(TestEnum.ONE).get(0)).isType(TestEnum[][][].class);
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Body_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Body_Test.java
index 11bec30..e14ae03 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Body_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Body_Test.java
@@ -193,7 +193,7 @@ public class HttpPartSchema_Body_Test {
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
 		assertTrue(s.isUniqueItems());
-		assertObject(s.getEnum()).json().is("['e1','e2']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", s.getDefault());
 
 		HttpPartSchema items = s.getItems();
@@ -211,7 +211,7 @@ public class HttpPartSchema_Body_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -229,7 +229,7 @@ public class HttpPartSchema_Body_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -247,7 +247,7 @@ public class HttpPartSchema_Body_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_FormData_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_FormData_Test.java
index 437b060..b38dcae 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_FormData_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_FormData_Test.java
@@ -95,7 +95,7 @@ public class HttpPartSchema_FormData_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -152,7 +152,7 @@ public class HttpPartSchema_FormData_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -209,7 +209,7 @@ public class HttpPartSchema_FormData_Test {
 		assertFalse(s.isUniqueItems());
 		assertFalse(s.isRequired());
 		assertFalse(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e4','e5','e6']");
+		assertObject(s.getEnum()).asJson().is("['e4','e5','e6']");
 		assertEquals("c3\nc4", s.getDefault());
 	}
 
@@ -310,7 +310,7 @@ public class HttpPartSchema_FormData_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e1','e2']");
+		assertObject(items.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", items.getDefault());
 
 		items = items.getItems();
@@ -328,7 +328,7 @@ public class HttpPartSchema_FormData_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -346,7 +346,7 @@ public class HttpPartSchema_FormData_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -364,7 +364,7 @@ public class HttpPartSchema_FormData_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Header_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Header_Test.java
index cb079e8..268cdc6 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Header_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Header_Test.java
@@ -97,7 +97,7 @@ public class HttpPartSchema_Header_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -154,7 +154,7 @@ public class HttpPartSchema_Header_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -211,7 +211,7 @@ public class HttpPartSchema_Header_Test {
 		assertFalse(s.isUniqueItems());
 		assertFalse(s.isRequired());
 		assertFalse(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e4','e5','e6']");
+		assertObject(s.getEnum()).asJson().is("['e4','e5','e6']");
 		assertEquals("c3\nc4", s.getDefault());
 	}
 
@@ -312,7 +312,7 @@ public class HttpPartSchema_Header_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e1','e2']");
+		assertObject(items.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", items.getDefault());
 
 		items = items.getItems();
@@ -330,7 +330,7 @@ public class HttpPartSchema_Header_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -348,7 +348,7 @@ public class HttpPartSchema_Header_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -366,7 +366,7 @@ public class HttpPartSchema_Header_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Path_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Path_Test.java
index 6bbdf41..a7ce2a8 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Path_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Path_Test.java
@@ -86,7 +86,7 @@ public class HttpPartSchema_Path_Test {
 		assertEquals(2, s.getMinLength().longValue());
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 	}
 
 	public static class A03 {
@@ -131,7 +131,7 @@ public class HttpPartSchema_Path_Test {
 		assertEquals(2, s.getMinLength().longValue());
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 	}
 
 	public static class A04 {
@@ -176,7 +176,7 @@ public class HttpPartSchema_Path_Test {
 		assertEquals(6, s.getMinLength().longValue());
 		assertFalse(s.isExclusiveMaximum());
 		assertFalse(s.isExclusiveMinimum());
-		assertObject(s.getEnum()).json().is("['e4','e5','e6']");
+		assertObject(s.getEnum()).asJson().is("['e4','e5','e6']");
 	}
 
 	@Path(
@@ -276,7 +276,7 @@ public class HttpPartSchema_Path_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e1','e2']");
+		assertObject(items.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", items.getDefault());
 
 		items = items.getItems();
@@ -294,7 +294,7 @@ public class HttpPartSchema_Path_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -312,7 +312,7 @@ public class HttpPartSchema_Path_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -330,7 +330,7 @@ public class HttpPartSchema_Path_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Query_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Query_Test.java
index d7b1fe2..dba3411 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Query_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Query_Test.java
@@ -97,7 +97,7 @@ public class HttpPartSchema_Query_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -154,7 +154,7 @@ public class HttpPartSchema_Query_Test {
 		assertTrue(s.isUniqueItems());
 		assertTrue(s.isRequired());
 		assertTrue(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -211,7 +211,7 @@ public class HttpPartSchema_Query_Test {
 		assertFalse(s.isUniqueItems());
 		assertFalse(s.isRequired());
 		assertFalse(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e4','e5','e6']");
+		assertObject(s.getEnum()).asJson().is("['e4','e5','e6']");
 		assertEquals("c3\nc4", s.getDefault());
 	}
 
@@ -312,7 +312,7 @@ public class HttpPartSchema_Query_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e1','e2']");
+		assertObject(items.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", items.getDefault());
 
 		items = items.getItems();
@@ -330,7 +330,7 @@ public class HttpPartSchema_Query_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -348,7 +348,7 @@ public class HttpPartSchema_Query_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -366,7 +366,7 @@ public class HttpPartSchema_Query_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_ResponseHeader_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_ResponseHeader_Test.java
index ad826a7..72587a0 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_ResponseHeader_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_ResponseHeader_Test.java
@@ -93,7 +93,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
 		assertTrue(s.isUniqueItems());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -146,7 +146,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
 		assertTrue(s.isUniqueItems());
-		assertObject(s.getEnum()).json().is("['e1','e2','e3']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2','e3']");
 		assertEquals("c1\nc2", s.getDefault());
 	}
 
@@ -201,7 +201,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertFalse(s.isUniqueItems());
 		assertFalse(s.isRequired());
 		assertFalse(s.isSkipIfEmpty());
-		assertObject(s.getEnum()).json().is("['e4','e5','e6']");
+		assertObject(s.getEnum()).asJson().is("['e4','e5','e6']");
 		assertEquals("c3\nc4", s.getDefault());
 	}
 
@@ -302,7 +302,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e1','e2']");
+		assertObject(items.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", items.getDefault());
 
 		items = items.getItems();
@@ -320,7 +320,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -338,7 +338,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -356,7 +356,7 @@ public class HttpPartSchema_ResponseHeader_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Response_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Response_Test.java
index 7d7bbc6..f5f0c9e 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Response_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchema_Response_Test.java
@@ -137,7 +137,7 @@ public class HttpPartSchema_Response_Test {
 		assertTrue(s.isExclusiveMaximum());
 		assertTrue(s.isExclusiveMinimum());
 		assertTrue(s.isUniqueItems());
-		assertObject(s.getEnum()).json().is("['e1','e2']");
+		assertObject(s.getEnum()).asJson().is("['e1','e2']");
 		assertEquals("c1\nc2", s.getDefault());
 
 		HttpPartSchema items = s.getItems();
@@ -155,7 +155,7 @@ public class HttpPartSchema_Response_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e3','e4']");
+		assertObject(items.getEnum()).asJson().is("['e3','e4']");
 		assertEquals("c3\nc4", items.getDefault());
 
 		items = items.getItems();
@@ -173,7 +173,7 @@ public class HttpPartSchema_Response_Test {
 		assertTrue(items.isExclusiveMaximum());
 		assertTrue(items.isExclusiveMinimum());
 		assertTrue(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e5','e6']");
+		assertObject(items.getEnum()).asJson().is("['e5','e6']");
 		assertEquals("c5\nc6", items.getDefault());
 
 		items = items.getItems();
@@ -191,7 +191,7 @@ public class HttpPartSchema_Response_Test {
 		assertFalse(items.isExclusiveMaximum());
 		assertFalse(items.isExclusiveMinimum());
 		assertFalse(items.isUniqueItems());
-		assertObject(items.getEnum()).json().is("['e7','e8']");
+		assertObject(items.getEnum()).asJson().is("['e7','e8']");
 		assertEquals("c7\nc8", items.getDefault());
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParser_Test.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParser_Test.java
index 1f2c316..56bcaf7 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParser_Test.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParser_Test.java
@@ -280,35 +280,35 @@ public class OpenApiPartParser_Test {
 	@Test
 	public void c10_stringType_noneFormat_2d() throws Exception {
 		HttpPartSchema s = tArray(tString()).build();
-		assertObject(parse(s, "foo,bar", String[].class)).json().is("['foo','bar']");
-		assertObject(parse(s, "foo,bar", List.class, String.class)).json().is("['foo','bar']");
-		assertObject(parse(s, "foo,bar", Object[].class)).json().is("['foo','bar']");
-		assertObject(parse(s, "foo,bar", List.class, Object.class)).json().is("['foo','bar']");
+		assertObject(parse(s, "foo,bar", String[].class)).asJson().is("['foo','bar']");
+		assertObject(parse(s, "foo,bar", List.class, String.class)).asJson().is("['foo','bar']");
+		assertObject(parse(s, "foo,bar", Object[].class)).asJson().is("['foo','bar']");
+		assertObject(parse(s, "foo,bar", List.class, Object.class)).asJson().is("['foo','bar']");
 		Object o = parse(s, "foo,bar", Object.class);
-		assertObject(o).json().is("['foo','bar']");
+		assertObject(o).asJson().is("['foo','bar']");
 		assertObject(o).isType(OList.class);
-		assertObject(parse(s, "foo,bar", C2[].class)).json().is("['C2-foo','C2-bar']");
-		assertObject(parse(s, "foo,bar", List.class, C2.class)).json().is("['C2-foo','C2-bar']");
+		assertObject(parse(s, "foo,bar", C2[].class)).asJson().is("['C2-foo','C2-bar']");
+		assertObject(parse(s, "foo,bar", List.class, C2.class)).asJson().is("['C2-foo','C2-bar']");
 		assertEquals("C3-['foo','bar']", parse(s, "foo,bar", C3.class).toString());
 	}
 
 	@Test
 	public void c11_stringType_noneFormat_3d() throws Exception {
 		HttpPartSchema s = tArrayPipes(tArray(tString())).build();
-		assertObject(parse(s, "foo,bar|baz", String[][].class)).json().is("[['foo','bar'],['baz']]");
-		assertObject(parse(s, "foo,bar|baz", List.class, String[].class)).json().is("[['foo','bar'],['baz']]");
-		assertObject(parse(s, "foo,bar|baz", List.class, List.class, String.class)).json().is("[['foo','bar'],['baz']]");
-		assertObject(parse(s, "foo,bar|baz", Object[][].class)).json().is("[['foo','bar'],['baz']]");
-		assertObject(parse(s, "foo,bar|baz", List.class, Object[].class)).json().is("[['foo','bar'],['baz']]");
-		assertObject(parse(s, "foo,bar|baz", List.class, List.class, Object.class)).json().is("[['foo','bar'],['baz']]");
... 14681 lines suppressed ...