Search code examples
c#jsoncase-insensitivesystem.text.json

Mapping issue when Deserialising


I have the following code:

    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;
    }

My variable responseContent has all the data that I expect. However, when I use the Deserialize method, my tt variable is empty. I believe the reason for this is that all the properties on the responseContent start with a lower case, but on my AuditReviewerDelegationDto they all start upper case. I cant change my model to be lowercase. Is there anyway I can either get the deserializer to ignore case or set the response object to retun camel case.


Solution

  • Yes, in order to ignore the casing of your property names, you just need to set JsonSerializerOptions.PropertyNameCaseInsensitive to true. See this page for more details, but here's what that might look like in code:

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

    However, if tt itself is null (rather than the individual properties of tt being null) you might have another problem - it depends on the actual text within responseContent.