【问题标题】:Web Api 2 not deserializing JSONWeb Api 2 不反序列化 JSON
【发布时间】:2016-10-30 18:15:01
【问题描述】:

我正在尝试在我的应用程序中调用 Web 服务 API,并且我正在传递一个参数,但由于某种原因,它没有反序列化 JSON。相反,它只是将我的 JSON 作为字符串传递。以下是 API 代码:

[Route("api/v1/images/GetMemberImageUrl", Name = "ApiImagesGetMemberImageUrl")]
[HttpPost]
public IHttpActionResult GetMemberImageUrl([FromBody]object memberId)
{
    // memberId is a string and it contains "{memberId: 18}"

    // Do stuff
    // ...
}

请注意,我最初拥有[FromBody]int memberId。我收到了一个错误的请求,所以我将其更改为object,这样我就可以看到传入的确切内容。传入的是一个包含"{memberId: 18}" 的字符串。

这是我对 API 的 AJAX 调用代码:

$.ajax({
    type: 'POST',
    cache: false,
    timeout: 30000,
    data: JSON.stringify({memberId: @Infrastructure.Member.GetAuthenticatedMembersId()}),
    url: '@Url.HttpRouteUrl("ApiImagesGetMemberImageUrl", null)',
    contentType: "application/json",
    success: function(retval) {
        // Do more stuff
    }
});

知道为什么模型绑定器不反序列化我的 JSON 吗?

【问题讨论】:

  • 嘿,您是否尝试过创建一个模型以将 object 更改为 YourModel(与您的论点具有相同的属性)?通常我是这样做的。
  • @VagnerLucas - 我可能会这样做并且它可能会起作用,但是,我的理解是 Web Api 2 的模型绑定器应该足够聪明,知道如何将我的参数绑定到传入的JSON。
  • @VagnerLucas - 确实有效。我刚试过。但是,我仍然认为模型绑定器应该为我做这件事,而不必每次都创建一个新的模型类。
  • @Icemanind diud 你尝试只写数据:{memberId: @Infrastructure.Member.GetAuthenticatedMembersId()},(不带字符串化)并添加 dataType : "json" 参数?
  • 是的。我遇到了同样的麻烦,但我认为只要你将一个对象作为参数传递,就没有办法绑定,而且它得到的正是你传递的内容(一个 json 对象)。我使用了JavaScriptSerializer 中的Deserialize 方法,这是一种方法。

标签: c# jquery json asp.net-mvc asp.net-web-api2


【解决方案1】:

尝试像这样定义你的模型

public class MyModel
{
    public string MemberId { get; set; }
}

或者将您的数据作为简单值发布,而不定义 JSON 对象 {memberId: 18}。简单的喜欢

"18"

然后它将映射到您的属性 memberId,即使属性将有另一个名称。

更多reading

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多