Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 90c3890

Browse files
committed
Merge pull request #458 from allthedrones/master
Correct deserialization for Enums with underscores in their actual named values.
2 parents 7d51fa1 + 6cbcd33 commit 90c3890

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/ServiceStack.Text/Common/ParseUtils.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ public static Type ParseType(string assemblyQualifiedName)
6464
public static object TryParseEnum(Type enumType, string str)
6565
{
6666
if (JsConfig.EmitLowercaseUnderscoreNames)
67-
str = str.Replace("_", "");
67+
{
68+
string[] names = Enum.GetNames(enumType);
69+
if (Array.IndexOf(names, str) == -1) // case sensitive ... could use Linq Contains() extension with StringComparer.InvariantCultureIgnoreCase instead for a slight penalty
70+
str = str.Replace("_", "");
71+
}
6872

6973
return Enum.Parse(enumType, str, ignoreCase: true);
7074
}

tests/ServiceStack.Text.Tests/EnumTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,12 @@ public void Can_serialize_different_enum_styles()
149149
{
150150
Assert.That("Word".FromJson<EnumStyles>(), Is.EqualTo(EnumStyles.Word));
151151
Assert.That("DoubleWord".FromJson<EnumStyles>(), Is.EqualTo(EnumStyles.DoubleWord));
152+
Assert.That("Underscore_Words".FromJson<EnumStyles>(), Is.EqualTo(EnumStyles.Underscore_Words));
152153

153154
using (JsConfig.With(emitLowercaseUnderscoreNames: true))
154155
{
155156
Assert.That("Double_Word".FromJson<EnumStyles>(), Is.EqualTo(EnumStyles.DoubleWord));
157+
Assert.That("Underscore_Words".FromJson<EnumStyles>(), Is.EqualTo(EnumStyles.Underscore_Words));
156158
}
157159
}
158160
}

0 commit comments

Comments
 (0)