C # Был найден неожиданный узел ‘StartObject’ для свойства ‘InputArguments’ при чтении из программы чтения JSON. Ожидался узел ‘PrimitiveValue’

#c# #json #rest-client #uipath

#c# #json #rest-клиент #uipath

Вопрос:

Я использую RestClient для передачи параметра JSON в api на C #.Но я получаю ответ

«Неожиданный узел ‘StartObject’ был найден для свойства с именем ‘InputArguments’ при чтении из программы чтения JSON. Ожидался узел ‘PrimitiveValue'»

Я использую приведенный ниже код на C#

 var client_startRobot = new RestClient("https://xxxx.xxxx.com/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs");
var request_startRobot = new RestRequest(Method.POST) ;
request_startRobot.AddParameter("Authorization", string.Format("Bearer "   result), ParameterType.HttpHeader);
request_startRobot.AddHeader("content-type", "application/json");
string parameter = "{"startInfo":{"ReleaseKey": "ds32rd1-6c98-42f542d-23bb8111ac91d","RobotIds": [1],"JobsCount": 0,"Strategy": "Specific","InputArguments": {"add_name": "xxxxx-xxx-"}}}";
request_startRobot.AddParameter("application/json; charset=utf-8", parameter, ParameterType.RequestBody);
IRestResponse response_startRobot = client_startRobot.Execute(request_startRobot);
  

Ответ №1:

Похоже, это вопрос тщательного чтения документации API. Предполагая, что вы пытаетесь вызвать orchestrator, как описано здесь, я нахожу этот пример, который очень похож на ваш.

 { "startInfo":
   { "ReleaseKey": "5b754c63-5d1a-4c37-bb9b-74b69e4934bf",
     "Strategy": "Specific",
     "RobotIds": [ 1553 ],
     "NoOfRobots": 0,
     "Source": "Manual",
     "InputArguments": "{"message":"Aloha"}"
   } 
}
  

Обратите внимание, что значение InputArguments на самом деле является простой строкой, не фактическим JSON (строка содержит экранированную строку JSON).

Ваш запрос выглядит следующим образом:

 "InputArguments": {"add_name": "xxxxx-xxx-"}
  

В соответствии с приведенным примером, это должно выглядеть следующим образом:

 "InputArguments": "{"add_name": "xxxxx-xxx-"}"
  

Похоже, вам придется «дважды экранировать» эту часть вашей строки, что-то вроде этого:

 "InputArguments": "{\"add_name\": \"xxxxx-xxx-\"}"
  

На самом деле создание строго типизированного объекта запроса и предоставление сериализации вашему клиенту REST может упростить чтение.

Ответ №2:

Я получил эту ошибку, и у меня было regardingobjectid свойство, которое, как я подозревал, могло быть причиной ошибки, хотя, казалось, все было нормально с кодированием,

наконец я понял, что проблема была в другом поле

 task["subject"] = data.subject;
  

data был dynamic , однако при регистрации вы получили строковое значение, но при присвоении ему вы получаете динамическое значение. Я исправил эту строку следующим образом

 task["subject"] = (string)data.subject
  

и ошибка исчезла 🙂