2017-07-26 99 views
0

我張貼在JavaScript角應用中的以下JSON有效載荷到的WebAPI服務:JSON反序列化誤差與陣列

{注: 「測試」,IDS:[606,603]}

this.http.post(url, {"Notes": "test", "Ids": [606,603]}, options) 

我試圖反序列化到.NET解釋是這樣的:

[HttpPost] 
public IHttpActionResult Test(Dictionary<string,string> formData) 
{ 
} 

(我試着添加[FromBody]裝飾太)。

如果我不包括數組,這工作正常。但是對於數組,我得到了幾個解析錯誤:

解析值時遇到意外的字符:[。路徑「ID」,第1行,第23位。 JavaScript屬性標識符字符無效:]。路徑「ID」,第1行,第30位。

+0

並非有效負載中的所有值都是字符串。使用'Dictionary ' – Nkosi

回答

1

您發佈的「JSON」無效JSON - 您可以使用像JSONLint這樣的工具來驗證您的JSON。

爲您的數據正確的JSON語法是:

{ 
    "Notes": "test", 
    "Ids": [606, 603] 
} 

而且 - 該方法採用Dictionary<string,string>對象。你的數組不是一個字符串,因此當試圖將數組反序列化爲一個字符串時,控制器會失敗。

我的建議是創建一個控制器方法應該接收的模型。就像這樣:

[HttpPost] 
public IHttpActionResult Test(YourModel data) 
{ 
} 

class YourModel 
{  
    public string Notes {get;set;} 
    public int[] Ids {get;set;} 
} 

使用此代碼,控制器將反序列化JSON(當你已經糾正了JSON語法問題)進入YourModel一個實例。

+0

因爲我的javascript看起來像這樣:this.http.post(url,{「Notes」:notes,「ID」:idList},options) - 任何想法如何讓它正確地格式化?此外,解析錯誤提示它發現解析「[」的錯誤。我將把這個javascript添加到OP中。 –

+0

另一個想法是,如果我只發送:{注:「測試」}在有效載荷(JavaScript是{「註釋」:「測試」}),它被接受。所以我認爲這是一個數組問題。 –

+0

@MikeWitt - 你是對的,陣列也是一個問題。我已經更新了我的答案。 –