From 052c9ce0ce7dc0e9c8c98e1902d0fdac97f6af52 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Sun, 23 Oct 2011 20:28:04 +0000 Subject: [PATCH] Honor our 'ignore nulls' policy when converting objects to JSON trees. --- gson/src/main/java/com/google/gson/Gson.java | 7 ++++--- .../com/google/gson/functional/JsonTreeTest.java | 16 ++++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 616af880..5f2237ae 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -27,6 +27,7 @@ import com.google.gson.internal.bind.CollectionTypeAdapterFactory; import com.google.gson.internal.bind.DateTypeAdapter; import com.google.gson.internal.bind.ExcludedTypeAdapterFactory; import com.google.gson.internal.bind.JsonElementReader; +import com.google.gson.internal.bind.JsonElementWriter; import com.google.gson.internal.bind.MapTypeAdapterFactory; import com.google.gson.internal.bind.MiniGson; import com.google.gson.internal.bind.ObjectTypeAdapter; @@ -400,9 +401,9 @@ public final class Gson { */ @SuppressWarnings({"unchecked", "rawtypes"}) // the caller is required to make src and typeOfSrc consistent public JsonElement toJsonTree(Object src, Type typeOfSrc) { - // Serialize 'src' to JSON, then deserialize that to a JSON tree. - TypeAdapter adapter = miniGson.getAdapter(TypeToken.get(typeOfSrc)); - return adapter.toJsonElement(src); + JsonElementWriter writer = new JsonElementWriter(); + toJson(src, typeOfSrc, writer); + return writer.get(); } /** diff --git a/gson/src/test/java/com/google/gson/functional/JsonTreeTest.java b/gson/src/test/java/com/google/gson/functional/JsonTreeTest.java index 195f6f99..a6479403 100644 --- a/gson/src/test/java/com/google/gson/functional/JsonTreeTest.java +++ b/gson/src/test/java/com/google/gson/functional/JsonTreeTest.java @@ -1,16 +1,14 @@ package com.google.gson.functional; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import junit.framework.TestCase; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.common.TestTypes.BagOfPrimitives; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import junit.framework.TestCase; /** * Functional tests for {@link Gson#toJsonTree(Object)} and @@ -62,6 +60,12 @@ public class JsonTreeTest extends TestCase { assertEquals(json1, json2); } + public void testJsonTreeNull() { + BagOfPrimitives bag = new BagOfPrimitives(10L, 5, false, null); + JsonObject jsonElement = (JsonObject) gson.toJsonTree(bag, BagOfPrimitives.class); + assertFalse(jsonElement.has("stringValue")); + } + private void assertContains(JsonObject json, JsonPrimitive child) { for (Map.Entry entry : json.entrySet()) { JsonElement node = entry.getValue();