我有一个使用 Newtonsoft JObject 创建的 JSON 对象,但如果任何属性有空格、斜杠等,当我尝试提交它时,我会收到一个错误的请求错误。
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","ID":">6278042E-ED64-0418-A651-5C574dc4F12B","属性":{"描述":"测试","源":"日期=2/14/2019"}}}
序列化后 byteData 仍然 = {"data":{"type":"synch_log","id":"6278042e-ed64-0418-a651-5c574dc4f12b","attributes":{"description":"test","source":"date=2/14/2019"}}}
我希望/被转义。任何文本字符串都可以正常工作我也尝试了 jsonserializer 设置作为默认和 EscapeHtml,但结果相同。
其他字符会导致相同的错误。 "datetoday"正确发布,但"date=today"和"date today"会导致 400 错误请求错误
我找到的最接近的答案是,也许该对象正在被双重转义,但我看不出会是怎样的。
谢谢大家。 布莱恩,你把我引向了正确的方向。 我没有提到这是对SuiteCRM的API调用,但是您的问题让我想到了服务器端,事实证明V8 API存在未解决的错误。 我只是假设这是我的代码。
GitHub 错误报告