From 25cf73ed80d944a0698f3c926e9c877b641cba14 Mon Sep 17 00:00:00 2001 From: Matthew Lazarow Date: Tue, 27 Mar 2018 21:19:07 -0400 Subject: [PATCH] Json to struct error 388 --- .../Json/SimpleJson/SimpleJson.cs | 2 +- .../JsonUtilTest.cs | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNetCore.Blazor/Json/SimpleJson/SimpleJson.cs b/src/Microsoft.AspNetCore.Blazor/Json/SimpleJson/SimpleJson.cs index ff7cf93041..d418004e55 100644 --- a/src/Microsoft.AspNetCore.Blazor/Json/SimpleJson/SimpleJson.cs +++ b/src/Microsoft.AspNetCore.Blazor/Json/SimpleJson/SimpleJson.cs @@ -1430,7 +1430,7 @@ namespace SimpleJson obj = value; else { - obj = ConstructorCache[type](); + obj = ConstructorCache[type]?.Invoke() ?? Activator.CreateInstance(type); foreach (KeyValuePair> setter in SetCache[type]) { object jsonValue; diff --git a/test/Microsoft.AspNetCore.Blazor.Test/JsonUtilTest.cs b/test/Microsoft.AspNetCore.Blazor.Test/JsonUtilTest.cs index b558244fea..1e4d6e747a 100644 --- a/test/Microsoft.AspNetCore.Blazor.Test/JsonUtilTest.cs +++ b/test/Microsoft.AspNetCore.Blazor.Test/JsonUtilTest.cs @@ -80,6 +80,46 @@ namespace Microsoft.AspNetCore.Blazor.Test Assert.Equal(new TimeSpan(7665, 1, 30, 0), person.Age); } + [Fact] + public void CanSerializeStructToJson() + { + // Arrange + var commandResult = new SimpleError + { + Message = "Test", + ContainsError = true, + ErrorId = 1 + }; + + // Act + var result = JsonUtil.Serialize(commandResult); + + // Assert + Assert.Equal("{\"Message\":\"Test\",\"ContainsError\":true,\"ErrorId\":1}", result); + } + + [Fact] + public void CanDeserializeStructFromJson() + { + // Arrange + var json = "{\"Message\":\"Test\",\"ContainsError\":true,\"ErrorId\":1}"; + + //Act + var simpleError = JsonUtil.Deserialize(json); + + // Assert + Assert.Equal("Test", simpleError.Message); + Assert.True(simpleError.ContainsError); + Assert.Equal(1, simpleError.ErrorId); + } + + struct SimpleError + { + public string Message { get; set; } + public bool ContainsError { get; set; } + public int? ErrorId { get; set; } + } + class Person { public int Id { get; set; }