Skip to content
This repository has been archived by the owner on May 16, 2022. It is now read-only.

Commit

Permalink
support EnumMemberAttribute
Browse files Browse the repository at this point in the history
  • Loading branch information
neuecc committed Nov 17, 2017
1 parent 4fdd90f commit a89e4f4
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/Utf8Json/Formatters/EnumFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,15 @@ static EnumFormatter()
var dataMember = item.GetCustomAttributes(typeof(DataMemberAttribute), true)
.OfType<DataMemberAttribute>()
.FirstOrDefault();
var enumMember = item.GetCustomAttributes(typeof(EnumMemberAttribute), true)
.OfType<EnumMemberAttribute>()
.FirstOrDefault();

values.Add(value);
names.Add((dataMember != null && !string.IsNullOrEmpty(dataMember.Name)) ? dataMember.Name : name);
names.Add(
(enumMember != null) ? enumMember.Value
: (dataMember != null && !string.IsNullOrEmpty(dataMember.Name)) ? dataMember.Name
: name);
}

nameValueMapping = new ByteArrayStringHashTable<T>(names.Count);
Expand Down
37 changes: 37 additions & 0 deletions tests/Utf8Json.Tests/EnumAsStringTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,22 @@ public enum DataMemberFlag
FooBarBaz = 32
}

[Flags]
public enum EnumMemberFlag
{
[EnumMember(Value = "F")]
[DataMember(Name = "Boo")]
Foo = 0,
Bar = 1,
Baz = 2,
[EnumMember(Value = "FB")]
FooBar = 4,
FooBaz = 8,
BarBaz = 16,
[EnumMember(Value = "FBB")]
FooBarBaz = 32
}

public class EnumAsStringTest
{
public static object enumData = new object[]
Expand Down Expand Up @@ -97,5 +113,26 @@ public void DataMemberTest()
JsonSerializer.Deserialize<DataMemberFlag>(v).Is(item.Item1);
}
}

[Fact]
public void EnumMemberTest()
{
var xs = new[] {
(EnumMemberFlag.Foo, "F"),
(EnumMemberFlag.Bar, "Bar"),
(EnumMemberFlag.Baz, "Baz"),
(EnumMemberFlag.FooBar, "FB"),
(EnumMemberFlag.FooBaz, "FooBaz"),
(EnumMemberFlag.BarBaz, "BarBaz"),
(EnumMemberFlag.FooBarBaz, "FBB"),

};
foreach (var item in xs)
{
var v = JsonSerializer.ToJsonString(item.Item1);
v.Trim('\"').Is(item.Item2);
JsonSerializer.Deserialize<EnumMemberFlag>(v).Is(item.Item1);
}
}
}
}

0 comments on commit a89e4f4

Please sign in to comment.