NET5: ReadFromJsonAsync perché ho dei null value?

Oggi non mi voglio decicare a come utlizzare System.Net.Http.Json & ReadFromJsonAsync perché l’argomento e’ stato trattato nel post intitolato NET5: System.Net.Http.Json & ReadFromJsonAsync lo scorso dicembre.

ReadFromJsonAsync & null

Prendiamo parte del codice sorgente scritto in precedenza dove viene usato ReadFromJsonAsync

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public async Task<T> GetAsync<T>(string url)
{
    using (HttpClient client = new HttpClient())
    {
        var request = new HttpRequestMessage(HttpMethod.Get, url);
        using (var response = await client.SendAsync(request))
        {
            if (response.IsSuccessStatusCode)
            {
                var items = await response.Content.ReadFromJsonAsync<T>();
                return items;
            }
        }
    }

    return default(T);
}

Ammetto che la prima volta che ho utilizzato questo codice ho anche pensato:

questo ReadFromJsonAsync sembra tanto figo, ma non funziona benissimo. Ho dei valori a null eppure ho i valori!

La soluzione è stata molto semplice ed ora vi mosto lo stato del codice precedente al fix.

1
2
3
4
5
6
7
8
public class TestDTO
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public string PhoneNumber;
    public string MailAddress;
}

Ora vi lascio immaginare il mio stupore nel vedere PhoneNumber & MailAddress tutti a null.

Ora vi svelo il mistero dei null value.

TIPS: Quando utilizzate ReadFromJsonAsync i campi presenti del DTO devono essere tutti quanti property con get e set come per FirstName e LastName.

A questo punto vi posso garantire di avere ritirato i miei pensieri sul presunto non funzionamento del ReadFromJsonAsync.

Buona settimana!