Merge pull request #287 from Verdent/272-enumset-deserialization Fixes #272 EnumSet deserialization
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/CollectionDeserializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/CollectionDeserializer.java index 4a4587d..53c52b8 100644 --- a/src/main/java/org/eclipse/yasson/internal/serializer/CollectionDeserializer.java +++ b/src/main/java/org/eclipse/yasson/internal/serializer/CollectionDeserializer.java
@@ -56,6 +56,8 @@ if (rawType.isInterface()) { final T x = createInterfaceInstance(rawType); if (x != null) return x; + } else if (EnumSet.class.isAssignableFrom(rawType)) { + return (T) EnumSet.noneOf((Class<Enum>) collectionValueType); } return builder.getJsonbContext().getInstanceCreator().createInstance(rawType); }
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/collections/CollectionsTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/collections/CollectionsTest.java index a6fb699..b17079d 100644 --- a/src/test/java/org/eclipse/yasson/defaultmapping/collections/CollectionsTest.java +++ b/src/test/java/org/eclipse/yasson/defaultmapping/collections/CollectionsTest.java
@@ -213,6 +213,7 @@ final String result = jsonb.toJson(languageEnumSet); assertTrue("[\"Czech\",\"Slovak\"]".equals(result) || "[\"Slovak\",\"Czech\"]".equals(result)); + assertEquals(languageEnumSet, jsonb.fromJson(result, new TestTypeToken<EnumSet<Language>>() {}.getType())); } @Test