Bullgill Coder Ответов: 2

JSON теряет кавычки, когда я использую jsonconvert.deserializeobject


Я получаю с другого сайта запрос curl с json.
Примером запроса может быть
curl -X PUT -H "Content-Type: application/json" -d '{"c_id":"487672","amount":10}' http://xxxx/api/b2

Это всего лишь тестовый код, чтобы попытаться увидеть значения...
[HttpPut]
public void Confirmation(HttpRequestMessage request)
{
    var content = request.Content;
    string jsonContent = content.ReadAsStringAsync().Result;
    CreateUpdate cpu = JsonConvert.DeserializeObject<CreateUpdate>(jsonContent);
    string acuid = cpu.c_id;
    return;
}

Если я запускаю с помощью приведенного выше curl то значение строки jsonContent равно
'{c_id:487672,amount:10}'

И в результате код ломается, а строка acuid не заполняется.

Что я уже пробовал:

В качестве теста я изменил завиток на
curl -X PUT -H "Content-Type: application/json" -d "{'c_id':'487672','amount':10}' http://xxxx/api/b2

т. е. замена двойных кавычек одинарными кавычками.
{'c_id':'487672','amount':10}

На этот раз моя переменная acuid заполнена правильно.

Мой вопрос заключается в том, что мне нужно сделать, чтобы оригинальный завиток можно было прочитать, не теряя его кавычек.

F-ES Sitecore

Я думаю, что это просто причуда с Windows-версией cURL, ей нужно, чтобы внешние кавычки были двойными, а внутренние-одинарными.

2 Ответов

Рейтинг:
2

OriginalGriff

Вы должны экранировать двойные кавычки в строке JSON:

{\"c_id\":\"487672\",\"amount\":10}

Но... чтобы получить его через процессор CMD, вам, возможно, придется дополнительно экранировать escape-символ:
"{\\\"c_id\\\":\\\"487672\\\",\\\"amount\\\":10}"


Bullgill Coder

Моя проблема здесь заключается в том, что у меня нет никакого контроля над исходной строкой JSON, поэтому мне нужно заставить свой код работать с предоставленным JSON.

OriginalGriff

Проблема в том, что кавычки используются повторно - командный процессор "кормится" ими, чтобы использовать в качестве разделителей для своей обработки строк, а также ожидающий этого JSON.
Чтобы получить "raw JSON" через командный процессор, вы должны избежать их.

Рейтинг:
10

Bullgill Coder

Это не очень красиво, но я добавил следующую строку, чтобы вернуть кавычки...

jsonContent = jsonContent.Replace("'{", "{'").Replace(":", "':'").Replace(",", "','").Replace("}'", "'}"); 
Я сделал это прямо перед десериализацией, и он способен правильно заполнять мои переменные.