From 9bfa4f8f2ee30ad9f0f31e4fde812d7c6413dd2a Mon Sep 17 00:00:00 2001 From: Mischa Weerwag Date: Wed, 28 Feb 2024 01:54:36 +0100 Subject: [PATCH] Fix Serialization always results in a Success object. (#166) Co-authored-by: Steve Smith --- src/Ardalis.Result/PagedInfo.cs | 8 +++++++- src/Ardalis.Result/PagedResult.cs | 7 +++++-- src/Ardalis.Result/Result.cs | 8 +++++++- .../SystemTextJsonSerializer.cs | 13 +++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/Ardalis.Result/PagedInfo.cs b/src/Ardalis.Result/PagedInfo.cs index 4cd79b8..fcde565 100644 --- a/src/Ardalis.Result/PagedInfo.cs +++ b/src/Ardalis.Result/PagedInfo.cs @@ -1,4 +1,6 @@ -namespace Ardalis.Result +using System.Text.Json.Serialization; + +namespace Ardalis.Result { public class PagedInfo { @@ -11,9 +13,13 @@ public PagedInfo(long pageNumber, long pageSize, long totalPages, long totalReco TotalRecords = totalRecords; } + [JsonInclude] public long PageNumber { get; private set; } + [JsonInclude] public long PageSize { get; private set; } + [JsonInclude] public long TotalPages { get; private set; } + [JsonInclude] public long TotalRecords { get; private set; } public PagedInfo SetPageNumber(long pageNumber) diff --git a/src/Ardalis.Result/PagedResult.cs b/src/Ardalis.Result/PagedResult.cs index e75d6d7..971ee91 100644 --- a/src/Ardalis.Result/PagedResult.cs +++ b/src/Ardalis.Result/PagedResult.cs @@ -1,4 +1,6 @@ -namespace Ardalis.Result +using System.Text.Json.Serialization; + +namespace Ardalis.Result { public class PagedResult : Result { @@ -7,6 +9,7 @@ public PagedResult(PagedInfo pagedInfo, T value) : base(value) PagedInfo = pagedInfo; } - public PagedInfo PagedInfo { get; } + [JsonInclude] + public PagedInfo PagedInfo { get; init; } } } diff --git a/src/Ardalis.Result/Result.cs b/src/Ardalis.Result/Result.cs index b8811fc..9fcb122 100644 --- a/src/Ardalis.Result/Result.cs +++ b/src/Ardalis.Result/Result.cs @@ -35,15 +35,21 @@ protected Result(ResultStatus status) ValidationErrors = result.ValidationErrors, }; - public T Value { get; } + [JsonInclude] + public T Value { get; init; } [JsonIgnore] public Type ValueType => typeof(T); + [JsonInclude] public ResultStatus Status { get; protected set; } = ResultStatus.Ok; public bool IsSuccess => Status == ResultStatus.Ok; + [JsonInclude] public string SuccessMessage { get; protected set; } = string.Empty; + [JsonInclude] public string CorrelationId { get; protected set; } = string.Empty; + [JsonInclude] public IEnumerable Errors { get; protected set; } = new List(); + [JsonInclude] public List ValidationErrors { get; protected set; } = new List(); /// diff --git a/tests/Ardalis.Result.UnitTests/SystemTextJsonSerializer.cs b/tests/Ardalis.Result.UnitTests/SystemTextJsonSerializer.cs index f15f079..2ecb2ae 100644 --- a/tests/Ardalis.Result.UnitTests/SystemTextJsonSerializer.cs +++ b/tests/Ardalis.Result.UnitTests/SystemTextJsonSerializer.cs @@ -48,6 +48,19 @@ public void ShouldDeserializeResultOfReferenceType() Assert.Equivalent(expected, result); } + + + [Fact] + public void ShouldDeserializeCorrectResultType() + { + var obj = Result.NotFound("NotFound"); + + var a = JsonSerializer.Serialize(obj); + var b = JsonSerializer.Deserialize(a); + var c = JsonSerializer.Serialize(b); + + Assert.Equivalent(a, c); + } private class Foo {