Как настроить сериализацию / десериализацию для передачи от веб-API до ядра? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть метод контроллера, обеспечивающий словарь (Web Api 2.1, Framework 4.8)

[HttpGet]
[Route("dictionary")]
public Generic.Dictionary<int, string> GetTestDictionary()
{
    return new Generic.Dictionary<int, string>() { { 21, "twenty one" }, { 42, "forty two" } };
}

Ответ в браузере (firefox):

{" 21 ":" двадцать один "," 42 ":" сорок два "}

Для получения данных я использую (ASP. NET Core 3.1 + HttpClientJsonExtensions)

public class ApiFacade {
    private HttpClient client;

    public ApiFacade(HttpClient client) {
        this.client = client;
    }

    public Task<Dictionary<TKey, string>> GetDictionaryAsync<TKey>() {
        return client.GetJsonAsync<Dictionary<TKey, string>>($"api/dictionary");
    }
}

Я могу прочитать словарь как <string, string>

var a = await _apiFacade.GetDictionaryAsync<string>();

Но попытка прочитать его как <int, string>

var b = await _apiFacade.GetDictionaryAsync<int>(); 

не удалась с System.NotSupportedException

Тип коллекции 'System.Collections.Generi c .Dictionary`2 [System.Int32, System.String]' не поддерживается.

Я использую LINQ для преобразования от Dictionary<string,string> до <int,string>.

Есть ли способ как перевести Dictionary<int,string> без воссоздания с <string,string>?

...