OK,Правильный способ обработки символа амперсанд в JSON строку отправить REST веб-службы
Я использую System.Runtime.Serialization
и DataContractJsonSerialization
.
Проблема в том, что в запросе я посылаю значение свойства с символом &
. Скачайте, AT&T
, и я получаю ответ с ошибкой: Invalid JSON Data
.
Я думал, что экранирование будет выполнено внутри библиотеки, но теперь я вижу, что сериализация остается нетронутой символом амперсанда &
.
Да, для формата JSON это действительно. Но это будет проблемой для моего запроса POST, так как мне нужно отправить его на сервер, который, если содержит амперсанд, будет отвечать с ошибкой, следовательно, я здесь.
HttpUtility.HtmlEncode
находится в библиотеке System.Web
, поэтому путь можно использовать, используя Uri.EscapeUriString
. Я сделал это, чтобы попытаться, но так или иначе, и без него все запросы работают нормально, за исключением амперсанда в ценности.
EDIT: HttpUtility
класс переносится на SDK для Windows Phone, но предпочитаемый способ кодирования строки должен быть Uri.EscapeUriString
.
Первой мыслью было замарать руки и начать замену специального символа, который вызовет проблему на сервере, но, интересно, есть ли другое решение, которое я должен сделать, чтобы оно было эффективным и «правильным»?
Я должен сказать, что я использую
// Convert the string into a byte array.
byte[] postBytes = Encoding.UTF8.GetBytes(data);
Чтобы преобразовать JSON в byte[]
и записи в Stream
. И
request.ContentType = "application/x-www-form-urlencoded";
Как WebRequest.ContentType
.
Итак, я испорчен по какой-то причине или что-то, что я пропустил?
спасибо.
Вы говорите, что вы отправляете данные JSON, но тип контента говорит иначе ('application/x-www-form-urlencoded'). Можете ли вы опубликовать дополнительную информацию о том, как вы отправляете данные и как служба их получает? – carlosfigueira
Даже изменяя его, сервер возвращает 500. –
Что вы используете на сервере? Можете ли вы разместить код сервера? – carlosfigueira