2016-07-08 230 views
0

我使用c#編碼的多個API,運行良好。我想用一個接收匿名對象(我不想創建一個類)。我嘗試反序列化對象時遇到問題。c#API「解析值時遇到意外字符:S.路徑'',第0行,第0位'

我有一個API遵循這個方案,它使用json_dumps功能從python調用時效果很好。但是,當我嘗試用JSON.stringify(由一個甚至郵遞員,我有一個400錯誤的請求

這裏是我的代碼,我已經嘗試了很多東西:

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

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

JsonConvert.DeserializeObject<dynamic>等待一個字符串,我想:

-to指定objectSentByUser如在myMethod 參數字符串當我這樣做,我有一個400,甚至沒有進入方法(我試圖發送一個JSON,加引號,以發送一個字符串等...)

-to與(string)objectSentByUser投,這是行不通的

-to使用toString()方法,這導致了一個錯誤: 意外的字符遇到在解析值:S.路徑',線0,位置0 這是很正常的,因爲objectSentByUser.toString()返回「System.Object的」 (但爲什麼與Python json_dump使用時,它的工作?)

當蟒蛇功能json_dump返回一個像這樣的對象調用此代碼:

「{\\」key1 \\「:\\」value1 \\「,...}」

從郵差給我寄了經典的POST與application/jsoncontentType在體內有效JSON(在計算器的另一個討論發現一個網站上驗證)

非常感謝您的幫助

見你

回答

1

如果用戶發送一個有效的JSON字符串到你的動作,那麼不要接受一個對象作爲參數,而是一個字符串(即因爲你的用戶給你一個)。

如果你在一個對象上調用ToString(),很可能它的格式不是Json格式。

試着接受一個字符串和反序列化:

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

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

感謝您的答覆。 當我嘗試API感謝帶有contentType應用程序/ json的POSTMAN和正文中的JSON對象時,我收到了400個錯誤的請求,我甚至沒有輸入myMethod。 它工作時,我送格式化這樣一個對象: 「{\」鍵1 \「:\」 VALUE1 \「 ...}」 不知道爲什麼我與蟒蛇雙反斜槓,而不是把與單反斜槓.. – heythere

相關問題