JSON字符串反序列化c#问题

cqoc49vn  于 2023-03-04  发布在  C#
关注(0)|答案(1)|浏览(221)

我发现应该为每个属性添加解决方案[JsonPropertyName(“currentPage”)]属性,或者第二个更好的解决方案添加camelCaseOption,如下所示

var options = new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            };

            // Act
            var pagedResult = JsonSerializer.Deserialize<PagedResult<UserDtoTest>>(jsonString, options);

我有这些类,我想测试JSON字符串序列化和反序列化是否正常工作,但测试失败,因为反序列化JSON字符串后得到的pagedResult只包含默认值。
x一个一个一个一个x一个一个二个x
以及

public class UserDtoTest
        {
            [JsonPropertyName("name")]
            public string Name { get; set; }
            [JsonPropertyName("active")]
            public bool Active { get; set; }
        }

当我试图反序列化json字符串时,它返回带有默认值的PagedResult,有什么想法吗?

[Fact]
        public void ReturnsPagedResultWithCorrectProperties()
        {
            // Arrange

            string jsonString = @"{
                  ""items"": [
                    {
                      ""name"": ""anatolijs"",
                      ""active"": true
                    },
                    {
                      ""name"": ""trololo"",
                      ""active"": true
                    },
                    {
                      ""name"": ""rindām"",
                      ""active"": true
                    },
                    {
                      ""name"": ""terepere"",
                      ""active"": true
                    }
                  ],
                  ""isEmpty"": false,
                  ""isNotEmpty"": true,
                  ""currentPage"": 1,
                  ""resultsPerPage"": 10,
                  ""totalPages"": 1,
                  ""totalResults"": 4
                }";
            
            // Act
            var pagedResult = JsonSerializer.Deserialize<PagedResult<UserDtoTest>>(jsonString);
            var serializedJsonString = JsonSerializer.Serialize<PagedResult<UserDtoTest>>(pagedResult);

            // Assert
            jsonString.Should().Be(serializedJsonString);
        }

一个约束必须使用System.Text.Json.Serialization;

eoigrqb6

eoigrqb61#

问题是您基类中没有设置,您可以修复它

public abstract class PagedResultBase
{
    public int CurrentPage { get; init; }
    public int ResultsPerPage { get; init; }
    public int TotalPages { get; init; }
    public long TotalResults { get; init; }

    // ....another code

}

如果您希望删除PropertyName属性,则需要不同的选项

var options = new JsonSerializerOptions
    {
        PropertyNameCaseInsensitive = true
    };

    var pagedResult = System.Text.Json.JsonSerializer.Deserialize<PagedResult<UserDtoTest>>(jsonString,options);

相关问题