【问题标题】:Mapping issue when Deserialising反序列化时的映射问题
【发布时间】:2021-12-16 05:01:48
【问题描述】:

我有以下代码:

    using System.Text.Json;
    private async Task<AuditReviewerDelegationDto> GetDelegationAsync()
    {
        // TODO: Get current logged in user, pass mdmuseridentifier
        var mdmUserIdentifier = 248113;
        var response = LocalHttpClient.GetAsync(BaseAddress + "api/AuditReviewerDelegation/GetDelegation/" + mdmUserIdentifier).Result;

        response.EnsureSuccessStatusCode();

        var responseContent = await response.Content.ReadAsStringAsync();

        var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent);
        return tt;
    }

我的变量 responseContent 包含我期望的所有数据。但是,当我使用 Deserialize 方法时,我的 tt 变量为空。我相信这是因为 responseContent 上的所有属性都以小写字母开头,但在我的 AuditReviewerDelegationDto 上它们都以大写字母开头。我无法将模型更改为小写。无论如何我可以让反序列化器忽略大小写或将响应对象设置为重新调整骆驼大小写。

【问题讨论】:

标签: c# json case-insensitive system.text.json


【解决方案1】:

是的,为了忽略您的属性名称的大小写,您只需将JsonSerializerOptions.PropertyNameCaseInsensitive 设置为true。有关更多详细信息,请参阅this page,但以下是代码中的样子:

var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent, options);

但是,如果 tt 本身是 null(而不是 tt 的各个属性是 null),您可能会遇到另一个问题 - 这取决于 responseContent 中的实际文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2012-11-19
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多