na moje oko ten if i metoda appendPrimitiveOrValue() są zbędne

wystarczy
        for (Property property : snapshot.getProperties()) {
           jsonObject.add(property.getName(), context.serialize(snapshot.getPropertyValue(property)));
        }
gson ogarnia takie rzeczy...