带有数组的WebApi中的JSON反序列化错误

时间:2017-07-26 14:35:02

标签: json asp.net-web-api json.net

我将以下JSON有效负载从JavaScript Angular应用程序发布到webapi服务:

{注:“测试”,ID:[606,603]}

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

我正在尝试将其反序列化为.net字典,如:

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

(我也尝试添加[FromBody]装饰器。)

如果我不包含数组,这可以正常工作。但是对于数组,我得到了几个解析错误:

解析值时遇到意外的字符:[。路径'Ids',第1行,第23位。 JavaScript属性标识符字符无效:]。 Path'Ids',第1行,第30位。

1 个答案:

答案 0 :(得分: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的实例。