对于具有不同名称的模型参数,Web.Api反序列化失败

时间:2013-06-10 12:12:19

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

我有一个方法,它将模型[AccountLinkRequest]作为带有url编码数据的参数。它默认使用Json.NET,而且,我不能使用设置 UseDataContractJsonSerializer = true 因为我有通用输出响应模型(在其他方法中)

[HttpPost]
public SomeResponse Link(AccountLinkRequest request)
{
    if (request.CustomerId == null)
        throw new Exception("Deserialization error here, pls help!");

    // other actions
}

这是我的模特课:

[DataContract]
[JsonObject]
public class AlertAccountLinkRequest
{
    [DataMember(Name = "id")]
    public string id { get; set; }

    [DataMember(Name = "customer_id")]
    [JsonProperty("customer_id")]
    public string CustomerId { get; set; }
}

问题: request.CustomerId总是 null 。请求非常简单:

web_service_URL / link?customer_id = customer_id& id = id(url-encoded)

如果我使用Customer_Id而不是CustomerId,一切都会好的,但我是一个傻瓜。谢谢!

1 个答案:

答案 0 :(得分:1)

如何实现这一目标并不是一个简单的答案。有关详细信息,请阅读:

How to bind to custom objects in action signatures in MVC/WebAPI

要点:

  1. 手动调用Action
  2. 中的解析函数
  3. 使用TypeConverter使复杂类型变得简单
  4. 使用自定义模型装订器
  5. 因此,如果您创建了能够使用某些属性的“SmartBinder”,您可以获得所需的内容。在框中没有任何功能,只有命名约定......