Ваш код не производит ничего похожего на стоящий объект JSON, он просто сериализует простую строку в JSON.Когда вы делаете это, все, что вы действительно получаете от другого конца, это просто ... простая строка - потому что это уже допустимый JSON.Сериализатор не может знать, что вы предполагали, что это отдельные поля, он просто видит один длинный фрагмент текста.Он не может приписать ему никакого дополнительного значения.
Например:
string _UserName = "123";
string _Password = "abc";
string request = "client_id=" + _UserName + "secret=" + _Password + "grant_type=client_credentials";
Console.WriteLine(JsonConvert.SerializeObject(request));
будет выводить только
"client_id=123secret=abcgrant_type=client_credentials"
Демо: https://dotnetfiddle.net/DTDDjI
Теперь, как я уже сказал, технически это допустимый JSON, но весьма маловероятно, что это будет то, что ожидает удаленный сервер - опять же, он не будет знать, что ему нужно проанализировать эту строку и извлечь из нее значения.Я не могу определить спецификацию вашего удаленного API (поскольку вы не сказали нам, какую конечную точку вы вызываете, или связали нас с какой-либо документацией), но я предполагаю, что будет ожидать объект со значениями в отдельных полях.Чтобы получить подобные вещи из C #, вам нужно начать с объекта C #, чтобы начать с:
Например:
string _UserName = "123";
string _Password = "abc";
var request = new { client_id = _UserName, secret = _Password, grant_type = "client_credentials" };
Console.WriteLine(JsonConvert.SerializeObject(request));
выведет
{"client_id":"123","secret":"abc","grant_type":"client_credentials"}
Демонстрация: https://dotnetfiddle.net/wCpMhV
Обратите внимание на использование анонимного объекта, содержащего дискретные поля для передачи в сериализатор JSON, а затем объекта, содержащего дискретные поля, который является результатом.
Как я уже сказал, яне могу проверить, является ли это именно тот макет, который ожидает удаленный сервер, но вы должны быть в состоянии проверить документацию, чтобы убедиться, что это правильно или нет.А если нет, то теперь вы надеетесь понять, как правильно сгенерировать полезный объект JSON, который бы соответствовал спецификации.
Еще один момент.Эта строка вашего кода:
request.AddHeader("content-type", "application/x-www-form-urlencoded");
не нужна.Вы можете удалить его, потому что
a) он устанавливает неправильный тип содержимого для запроса, содержащего JSON и
b) строка под ним будет (согласно документам RestSharp * 1036)* Установите правильный заголовок типа содержимого и содержимое тела JSON за один вызов.