Формат json String и передача его в тело с параметрами выдает ошибку - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь создать запрос с помощью RestSharp.

У меня есть следующая строка

"{ \"name\": \"string\", \"type\": \"string\", \"parentId\": \"string\", \"Location\": [ \"string\" ]}"

Мне нужно передать это в тело json, чтобы отправить запрос POST.попробуйте следующее.

public IRestResponse PostNewLocation(string Name, string Type, Nullable<Guid> ParentId, string Locatations)
{
  string NewLocation = string.Format("{ \"name\": \"{0}\", \"type\": \"{1}\", \"parentId\": \"{2}\", \"Location\": [ \"{3}\" ]}", Name, Type, ParentId, Location);
  var request = new RestRequest(Method.POST);
  request.Resource = string.Format("/Sample/Url");
  request.AddParameter("application/json", NewLocation, ParameterType.RequestBody);
  IRestResponse response = Client.Execute(request);
}

И ошибка

Message: System.FormatException : Input string was not in a correct format.

Как мне отформатировать приведенную выше строку, чтобы передать ее в тело json?

Мой тест не пройден приэта строка

string NewLocation = string.Format("{ \"name\": \"{0}\", \"type\": \"{1}\", \"parentId\": \"{2}\", \"Location\": [ \"{3}\" ]}", Name, Type, ParentId, Location);

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Проблема в фигурных скобках, используемых в начале и конце строки формата (поскольку они имеют особое значение).Избегайте их, добавив дополнительную скобку, например:

string NewLocation = string.Format("{{ \"name\": \"{0}\", \"type\": \"{1}\", \"parentId\": \"{2}\", \"Location\": [ \"{3}\" ]}}", Name, Type, ParentId, Location);
0 голосов
/ 21 декабря 2018

У вас есть открытые скобки в строке формата, но они не являются элементами формата.Вы могли бы использовать вместо этого двойные скобки:

// With more properties of course
string newLocation = string.Format("{{ \"name\": \"{0}\" }}", Name);

... но я бы настоятельно рекомендовал бы вам этого не делать.Вместо этого создайте JSON с использованием библиотеки JSON, например, Json.NET.Это действительно просто, используя классы или анонимные типы.Например:

object tmp = new
{
    name = Name,
    type = Type,
    parentId = ParentId,
    Location = Location
};
string json = JsonConvert.SerializeObject(tmp);

Таким образом:

  • Вам не нужно беспокоиться о том, содержат ли ваше имя, тип и т. Д. Символы, которые необходимо экранировать
  • Вам не нужно беспокоиться о форматных строках
  • Ваш код намного легче читать
...