From cdd516345818eab763da02e1b9d7ec42404e98c4 Mon Sep 17 00:00:00 2001 From: Inderjeet Singh Date: Fri, 10 Oct 2008 22:33:46 +0000 Subject: [PATCH] fix for bug 56 where Gson wasn't serialization null fields of type string, collection and arrays properly even when serializeNulls was set. --- .../google/gson/JsonSerializationVisitor.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java b/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java index c0ef82a0..24fc0862 100644 --- a/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java +++ b/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java @@ -80,14 +80,22 @@ final class JsonSerializationVisitor implements ObjectNavigator.Visitor { } public void visitArrayField(Field f, Type typeOfF, Object obj) { - if (!isFieldNull(f, obj)) { + if (isFieldNull(f, obj)) { + if (serializeNulls) { + addChildAsElement(f, new JsonNull()); + } + } else { Object array = getFieldValue(f, obj); addAsChildOfObject(f, typeOfF, array); } } public void visitCollectionField(Field f, Type typeOfF, Object obj) { - if (!isFieldNull(f, obj)) { + if (isFieldNull(f, obj)) { + if (serializeNulls) { + addChildAsElement(f, new JsonNull()); + } + } else { if (typeOfF == null) { throw new RuntimeException("Can not handle non-generic collections"); } @@ -151,8 +159,12 @@ final class JsonSerializationVisitor implements ObjectNavigator.Visitor { return childVisitor.getJsonElement(); } - public void visitPrimitiveField(Field f, Type typeOfF, Object obj) { - if (!isFieldNull(f, obj)) { + public void visitPrimitiveField(Field f, Type typeOfF, Object obj) { + if (isFieldNull(f, obj)) { + if (serializeNulls) { + addChildAsElement(f, new JsonNull()); + } + } else { TypeInfo typeInfo = new TypeInfo(typeOfF); if (typeInfo.isPrimitiveOrStringAndNotAnArray()) { Object fieldValue = getFieldValue(f, obj);