In SimpleJson, support enum values serialized as numbers.

Note: still doesn't support nullable enum types.
This commit is contained in:
Steve Sanderson 2018-03-04 21:25:43 +00:00
parent 61e07eb615
commit 0301250c4b
2 changed files with 13 additions and 3 deletions

View File

@ -1333,6 +1333,11 @@ namespace SimpleJson
if (type == typeof (Guid) && string.IsNullOrEmpty(str)) if (type == typeof (Guid) && string.IsNullOrEmpty(str))
return default(Guid); return default(Guid);
if (type.IsEnum)
{
type = type.GetEnumUnderlyingType();
}
if (value == null) if (value == null)
return null; return null;

View File

@ -46,12 +46,13 @@ namespace Microsoft.AspNetCore.Blazor.Test
{ {
Id = 1844, Id = 1844,
Name = "Athos", Name = "Athos",
Pets = new[] { "Aramis", "Porthos", "D'Artagnan" } Pets = new[] { "Aramis", "Porthos", "D'Artagnan" },
Hobby = Hobbies.Swordfighting
}; };
// Act/Assert // Act/Assert
Assert.Equal( Assert.Equal(
"{\"Id\":1844,\"Name\":\"Athos\",\"Pets\":[\"Aramis\",\"Porthos\",\"D'Artagnan\"]}", "{\"Id\":1844,\"Name\":\"Athos\",\"Pets\":[\"Aramis\",\"Porthos\",\"D'Artagnan\"],\"Hobby\":2}",
JsonUtil.Serialize(person)); JsonUtil.Serialize(person));
} }
@ -59,7 +60,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
public void CanDeserializeClassFromJson() public void CanDeserializeClassFromJson()
{ {
// Arrange // Arrange
var json = "{\"Id\":1844,\"Name\":\"Athos\",\"Pets\":[\"Aramis\",\"Porthos\",\"D'Artagnan\"]}"; var json = "{\"Id\":1844,\"Name\":\"Athos\",\"Pets\":[\"Aramis\",\"Porthos\",\"D'Artagnan\"],\"Hobby\":2}";
// Act // Act
var person = JsonUtil.Deserialize<Person>(json); var person = JsonUtil.Deserialize<Person>(json);
@ -68,6 +69,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
Assert.Equal(1844, person.Id); Assert.Equal(1844, person.Id);
Assert.Equal("Athos", person.Name); Assert.Equal("Athos", person.Name);
Assert.Equal(new[] { "Aramis", "Porthos", "D'Artagnan" }, person.Pets); Assert.Equal(new[] { "Aramis", "Porthos", "D'Artagnan" }, person.Pets);
Assert.Equal(Hobbies.Swordfighting, person.Hobby);
} }
class Person class Person
@ -75,6 +77,9 @@ namespace Microsoft.AspNetCore.Blazor.Test
public int Id { get; set; } public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string[] Pets { get; set; } public string[] Pets { get; set; }
public Hobbies Hobby { get; set; }
} }
enum Hobbies { Reading = 1, Swordfighting = 2 }
} }
} }