Как конвертировать \ используя newtonsoft.json.linq.serializeobject в vb.net httprequest? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть объект JSON, созданный с помощью Newtonsoft JObject, но я получаю ошибку неверного запроса при попытке отправить его, если в каком-либо из свойств есть пробелы, косые черты и т. Д.

updatestring = "date=2/14/2019"
Dim jobjattr As New Newtonsoft.Json.Linq.JObject(
    New Newtonsoft.Json.Linq.JProperty("description", "test"),
    New Newtonsoft.Json.Linq.JProperty("source", updatestring)
)
Dim jobjdat As New Newtonsoft.Json.Linq.JObject(
    New Newtonsoft.Json.Linq.JProperty("type", "synch_log"),
    New Newtonsoft.Json.Linq.JProperty("id", "6278042e-ed64-0418-a651-5c574dc4f12b"),
    New Newtonsoft.Json.Linq.JProperty("attributes", jobjattr)
)
Dim jobj As New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty("data", jobjdat))

Dim jsonserializersettings As New Newtonsoft.Json.JsonSerializerSettings
jsonserializersettings.StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii
Dim stringReq = Newtonsoft.Json.JsonConvert.SerializeObject(jobj, jsonserializersettings)

Dim byteData As Byte() = System.Text.Encoding.UTF8.GetBytes(stringReq)
httprequest.ContentLength = byteData.Length
Dim postreqstream As System.IO.Stream = .GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()

входящее заданиеj = {"данные": { "Тип": "synch_log", "идентификатор": "6278042e-ed64-0418-a651-5c574dc4f12b", "атрибуты": { "описание": "тест", "источник": "дата = 2/ 14/2019 "}}}

после сериализации byteData still = {" data ": {" type ":" synch_log "," id ":" 6278042e-ed64-0418-a651-5c574dc4f12b ","Атрибуты ": {" description ":" test "," source ":" date = 2/14/2019 "}}}

Я ожидаю, что / будет экранирован.любая текстовая строка работает нормально. Я также пробовал настройки jsonserializer по умолчанию и EscapeHtml, но с тем же результатом.

Другие символы приводят к тому же самому ошибке.«datetoday» публикует сообщения правильно, но «date = today» и «date today» приводят к ошибке 400 неверных запросов

Самый близкий ответ, который я нашел, это то, что, возможно, объект удваивается, но я не вижукак это будет.

1 Ответ

0 голосов
/ 07 февраля 2019

Спасибо всем.Брайан, ты привел меня в правильном направлении.Я не упомянул, что это вызов API для SuiteCRM, но ваш вопрос заставил меня задуматься о взгляде на сервер, и оказалось, что в V8 API есть нерешенная ошибка.Я просто предположил, что это был мой код.

Отчет об ошибке github

...