httpclient разместить вложенный словарь - PullRequest
1 голос
/ 11 мая 2019

У меня ошибка:

Код серьезности Описание Проект Состояние ошибки подавления строки файла CS1503 Аргумент 1: невозможно преобразовать из 'System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<string, string>>' в 'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>

Когда я размещаю вложенный словарь, используя HttpClient

var arg_employee = new Dictionary<string, Dictionary<string, string>>
{
    {
        "filter_data",
        new Dictionary<string, string>
        {
            {"user_name", "admin"},
        }
    },
};

var content = new FormUrlEncodedContent(arg_employee);
// ... Use HttpClient.
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.PostAsync(uRL, content))
using (HttpContent responseContent = response.Content)
{
    // ... Read the string.
    return await responseContent.ReadAsStringAsync();

Как я могу опубликовать вложенный словарь или массив?

1 Ответ

0 голосов
/ 11 мая 2019

FormUrlEncodedContent принимает IEnumerable<KeyValuePair<string, string>> nameValueCollection, а не Dictionary. Смотри это

Чтобы передать словарь, вы должны сериализовать его, например, в json.

Первый шаг, получение json-представления вашего словаря с помощью Newtonsoft.Json (вы можете вручную сериализовать его или использовать другую библиотеку)

using Newtonsoft.Json

var arg_employee = new Dictionary<string, Dictionary<string, string>>
{
    {
        "filter_data",
        new Dictionary<string, string>
        {
            {"user_name", "admin"},
        }
    },
};

var jsonDictionary = JsonConvert.SerializeObject(arg_employee );

Второй шаг, опубликуйте его как StringContent вместо FormUrlEncodedContent:

var content = new StringContent(jsonDictionary , Encoding.UTF8, "application/json");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...