Лишние слеши в json в PUT запросе

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
60
Реакции
25
Баллы
18
Всем привет.
Использую api для мой склад.
для этого делаю PUT запросы. Скрипт брал на этом форуме, раньше все работало без проблем. Сейчас же постоянно выдает ошибки.
Сапорт МойСклад посмотрела логи моих запросов. Сами запросы сформированы корректно но скрипт которым я передаю запросы, создает лишние слешы в названиях.
Вот так выглядит запрос в логах Мойсклад
C#:
Развернуть Свернуть Копировать
{"state":"{\r\n       \r\n        \"meta\": {\r\n            \"href\": \"https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/states/cb7a814e-9460-11eb-0a80-07a50015b203\",\r\n            \"metadataHref\": \"https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata\",\r\n            \"type\": \"state\",\r\n            \"mediaType\": \"application/json\"\r\n        }    \r\n}"}

С апорт говорит что в названиях параметров лишние слешы \"meta\": , \"metadataHref\":, \"type\": \"state\",\r\n .

Код срипта вот
C#:
Развернуть Свернуть Копировать
string Credentials = project.Variables["auth"].Value; 
string state = project.Variables["status"].Value; 

string url = project.Variables["url_sdelki"].Value;
string proxy = project.GetProxy();
string UserAgent = project.Profile.UserAgent;

object data =new {state};
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(data);
string response = ZennoPoster.HTTP.Request(
  method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.PUT,
  url: url,
  content: json,
  contentPostingType: "application/json",
  proxy: proxy,
  Encoding: "UTF-8",
  respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
  Timeout: 30000,
  Cookies: string.Empty,
  UserAgent: UserAgent,
  UseRedirect: false,
  MaxRedirectCount: 0,
  AdditionalHeaders: new[]{ string.Format("Authorization: Basic {0}",Credentials) },
  DownloadPath: null,
  UseOriginalUrl: true,
  throwExceptionOnError: true,
  cookieContainer: project.Profile.CookieContainer,
  removeDefaultHeaders: true // Удаляем стандартные заголовки
);

return response;

При помощи этого скрипта пытаюсь передать вот такой PUT запрос

C#:
Развернуть Свернуть Копировать
{
      
        "meta": {
            "href": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/states/cb7a814e-9460-11eb-0a80-07a50015b203",
            "metadataHref": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata",
            "type": "state",
            "mediaType": "application/json"
        }   
}

Помогите пожалуйста разобраться в каком месте скрипт делает лищние слеши.

Заранее очень благодарен.
Спасибо
 
Думаю, сериализация просто экранит символы.
Имеется ввиду вот эта строка:
C#:
Развернуть Свернуть Копировать
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(data);
 
Последнее редактирование:
Может подскажете как это исправить?
Скрин для примера, что происходит после сериализации.
105696


Попробовать убрать для начала. Можно закомментить, а передавать в
content: json,

не json, а data (насколько понимаю, там у вас нужный код).

PS. Но это не точно ))
 
Скрин для примера, что происходит после сериализации.
Посмотреть вложение 105696

Попробовать убрать для начала. Можно закомментить, а передавать в
content: json,

не json, а data (насколько понимаю, там у вас нужный код).

PS. Но это не точно ))
я закоментировал сериализацию,
заменил data на json
105699


при выполнении данного экшена выдается ошибака

105700


Не работает(((
или я что то делаю не так...
 
пробовал и так, тоже ошибка
105701
 
json это строка текстовая должна быть. нафига ее в объект ?

если не надо делать сериализацию, то надо самому json сформировать.
 
Просто нужный json в переменную.
Эту переменную - в запрос. Без сериализации ))

У тебя в переменной status нужный тебе запрос?
 
Если и это не поможет, то надо сначала десериализовать уже имеющийся json, потом сериализовать обратно с нововведениями.
 
Генерируйте JSON из структуры.
 
Коллеги. ХЕЛП!
c# неочень понимаю, как отключить сериализацию и что бы все работало так и не разобрался.
подскажите плиз как выключить эту сериализацию что бы запрос получился без слешей.
что бы в конечном итоге json имел такй вид
C#:
Развернуть Свернуть Копировать
{
"state": {
"meta": {
"href": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/states/d00283b7-3619-11ea-0a80-00e60017f7a0",
"metadataHref": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata",
"type": "state",
"mediaType": "application/json"
}
}
}

Знаю что этот код который выкладывал выше, он рабочий для коротких put запросов которые нужно сериализировать. Помогите плиз адаптировать его что бы запихивать в него длинные json без сериализации.

Спасибо!!!
 
Последнее редактирование:
Коллеги. ХЕЛП!
c# неочень понимаю, как отключить сериализацию и что бы все работало так и не разобрался.
подскажите плиз как выключить эту сериализацию что бы запрос получился без слешей.
что бы в конечном итоге json имел такй вид
C#:
Развернуть Свернуть Копировать
{
"state": {
"meta": {
"href": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/states/d00283b7-3619-11ea-0a80-00e60017f7a0",
"metadataHref": "https://online.moysklad.ru/api/remap/1.2/entity/customerorder/metadata",
"type": "state",
"mediaType": "application/json"
}
}
}

Знаю что этот код который выкладывал выше, он рабочий для коротких put запросов которые нужно сериализировать. Помогите плиз адаптировать его что бы запихивать в него длинные json без сериализации.

Спасибо!!!

Этих строк быть не должно:
object data =new {state}; - этой строки быть не должно.
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(data);

Должно быть скорее всего так, если в state валидный json.
string json = state;
 
  • Спасибо
Реакции: Roman Bondar
Спасибо, добрый человек!!!
Все работает!!!
 
  • Спасибо
Реакции: BAZAg

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)