Skip to content

Commit 145785a

Browse files
committed
Add Symbol support to JSONSerializers
JAVA-1933
1 parent 9d12901 commit 145785a

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

driver/src/main/com/mongodb/util/JSONSerializers.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.bson.types.MaxKey;
2929
import org.bson.types.MinKey;
3030
import org.bson.types.ObjectId;
31+
import org.bson.types.Symbol;
3132

3233
import javax.xml.bind.DatatypeConverter;
3334
import java.lang.reflect.Array;
@@ -104,6 +105,7 @@ static ClassMapBasedObjectSerializer addCommonSerializers() {
104105
serializer.addObjectSerializer(ObjectId.class, new ObjectIdSerializer(serializer));
105106
serializer.addObjectSerializer(Pattern.class, new PatternSerializer(serializer));
106107
serializer.addObjectSerializer(String.class, new StringSerializer());
108+
serializer.addObjectSerializer(Symbol.class, new SymbolSerializer(serializer));
107109
serializer.addObjectSerializer(UUID.class, new UuidSerializer(serializer));
108110
serializer.addObjectSerializer(BsonUndefined.class, new UndefinedSerializer(serializer));
109111
return serializer;
@@ -389,6 +391,21 @@ public void serialize(final Object obj, final StringBuilder buf) {
389391
}
390392
}
391393

394+
private static class SymbolSerializer extends CompoundObjectSerializer {
395+
396+
SymbolSerializer(final ObjectSerializer serializer) {
397+
super(serializer);
398+
}
399+
400+
@Override
401+
public void serialize(final Object obj, final StringBuilder buf) {
402+
Symbol symbol = (Symbol) obj;
403+
BasicDBObject temp = new BasicDBObject();
404+
temp.put("$symbol", symbol.toString());
405+
serializer.serialize(temp, buf);
406+
}
407+
}
408+
392409
private static class UuidSerializer extends CompoundObjectSerializer {
393410

394411
UuidSerializer(final ObjectSerializer serializer) {

driver/src/test/unit/com/mongodb/util/JSONSerializersTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.bson.types.MaxKey;
2828
import org.bson.types.MinKey;
2929
import org.bson.types.ObjectId;
30+
import org.bson.types.Symbol;
3031
import org.junit.Test;
3132

3233
import javax.xml.bind.DatatypeConverter;
@@ -209,6 +210,11 @@ public void testStrictSerialization() {
209210
buf = new StringBuilder();
210211
serializer.serialize(d, buf);
211212
assertEquals("{ \"$date\" : " + (d.getTime()) + "}", buf.toString());
213+
214+
// test SYMBOL
215+
buf = new StringBuilder();
216+
serializer.serialize(new Symbol("test"), buf);
217+
assertEquals("{ \"$symbol\" : \"test\"}", buf.toString());
212218
}
213219

214220
@Test

0 commit comments

Comments
 (0)