2016-07-08 5 views
0

Я использую несколько API, закодированных в C#, которые хорошо работают. Я хочу использовать один, получающий анонимный объект (я не хочу создавать класс). У меня проблема при попытке десериализации объекта.C# API "Неожиданный символ, встречающийся при разборе значения: S. Путь '', строка 0, позиция 0"

У меня есть API в соответствии с этой схемой, он хорошо работает, когда его вызывают от python, используя функцию json_dumps. Но когда я пытаюсь с JSON.stringify (от а или даже POSTMAN, у меня есть 400 плохой запрос

Вот мой код, я попробовал много вещей:.

[WebInvoke(Method = "POST", UriTemplate = "myUrl")] 
[OperationContract] 
public Message myMethod(object objectSentByUser) 
{ 

    var perso = JsonConvert.DeserializeObject<dynamic>(objectSentByUser.ToString()); 

JsonConvert.DeserializeObject<dynamic> ждет строки Я пробовал:

-в указать objectSentByUser в виде строки в аргументе myMethod Когда я так, у меня есть 400, даже не входя в метод (я пытался отправить JSON, чтобы добавить кавычки, чтобы отправьте строку и т. д.)

-в залиты (string)objectSentByUser, он не работает

-в использовать toString() метод, который приводит к следующей ошибке: Неожиданный символ встречается при разборе значения: S. Путь «», строка 0, положение 0 что вполне нормально, потому что objectSentByUser.toString() возвращается «System.Object» (но почему это работает при использовании питона json_dump?)

Этот код работает, когда вызывается функция питона json_dump, который возвращает объект, как это:

"{\\" key1 \\ ": \\" value1 \\ ", ...}"

От Почтальон я отправить классический POST с application/json как contentType и в теле действительного JSON (проверено на сайте найдены в другой дискуссии на StackOverflow)

Спасибо большое за помощь

See вы

ответ

1

Если пользователь отправляет действительную строку json вашему действию, то не принимайте объект как параметр, а скорее строку (т.е. потому что ваш пользователь отправляет вам один).

Если вы звоните ToString() по объекту, скорее всего, его нет в формате Json.

Попробуйте принимать строку и десериализации, что:

[WebInvoke(Method = "POST", UriTemplate = "myUrl")] 
[OperationContract] 
public Message myMethod(string jsonSentByUser) 
{ 

    var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser); 
+0

Спасибо за ваш ответ. Когда я пытаюсь API благодаря POSTMAN с приложением contentType/json и объектом JSON в теле, я получаю 400 запросов, я даже не вхожу в myMethod. Это работает, когда я посылаю объект, отформатированный таким образом: «{\» key1 \ «: \» значению1 \ «...}» Не знаю, почему я попытался с питона двойной обратной косой черты и не с одной обратной косой чертой .. – heythere