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

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8
Всем привет.
Использую 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"
        }   
}
Помогите пожалуйста разобраться в каком месте скрипт делает лищние слеши.

Заранее очень благодарен.
Спасибо
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 395
Благодарностей
978
Баллы
113
Думаю, сериализация просто экранит символы.
Имеется ввиду вот эта строка:
C#:
string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(data);
 
Последнее редактирование:

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 395
Благодарностей
978
Баллы
113
Может подскажете как это исправить?
Скрин для примера, что происходит после сериализации.
105696


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

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

PS. Но это не точно ))
 

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8
Скрин для примера, что происходит после сериализации.
Посмотреть вложение 105696

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

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

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


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

105700


Не работает(((
или я что то делаю не так...
 

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8
пробовал и так, тоже ошибка
105701
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 694
Баллы
113
json это строка текстовая должна быть. нафига ее в объект ?

если не надо делать сериализацию, то надо самому json сформировать.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 395
Благодарностей
978
Баллы
113
Просто нужный json в переменную.
Эту переменную - в запрос. Без сериализации ))

У тебя в переменной status нужный тебе запрос?
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 135
Благодарностей
489
Баллы
83
Если и это не поможет, то надо сначала десериализовать уже имеющийся json, потом сериализовать обратно с нововведениями.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 383
Благодарностей
3 306
Баллы
113

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8
Коллеги. ХЕЛП!
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 без сериализации.

Спасибо!!!
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Коллеги. ХЕЛП!
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

Roman Bondar

Client
Регистрация
10.09.2015
Сообщения
59
Благодарностей
25
Баллы
8
Спасибо, добрый человек!!!
Все работает!!!
 
  • Спасибо
Реакции: BAZAg

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