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

Binding 具有不同名称的模型参数的Web.Api反序列化失败,binding,asp.net-web-api,json.net,datamember,Binding,Asp.net Web Api,Json.net,Datamember,我有一个方法,它将模型[AccountLinkRequest]作为带有url编码数据的参数。默认情况下,它使用Json.NET,而且,我不能使用设置UseDataContractJsonSerializer=true,因为我有通用的输出响应模型(在其他方法中) 这是我的模型课: [DataContract] [JsonObject] public class AlertAccountLinkRequest { [DataMember(Name = "id")] public st

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

这是我的模型课:

[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。请求非常简单:

网站服务URL/链接?客户id=客户id&id=id(URL编码)


如果我使用Customer_Id而不是CustomerId,一切都会好起来,但我正在走捷径。谢谢大家!

如何做到这一点,没有一个简单的答案。有关更多详细信息,请阅读以下内容:

总结:

  • 在操作中手动调用parse函数
  • 使用类型转换器使复杂类型变得简单
  • 使用自定义模型活页夹

  • 因此,例如,如果您创建能够使用某些属性的“SmartBinder”,您就可以得到您想要的。开箱即用没有这方面的功能,只有命名约定…

    Radim,谢谢您的回复。我仍然不能相信DataMember/JsonProperty没有为它提供服务。这与ORM相同,我们不能定义自己的属性名而不是使用列名。顺便说一句,有Json.NET 5.0+更新,但没有任何变化在这种情况下,我们谈论的是ModelBinder。我们希望将查询(查询字符串的一部分)更改为对象。只有上述3种方法可用。你说的是对身体的分析。为此,我们使用中介格式化程序。这些可能是非常强大的,可调整的,可扩展的。。。所以这是最大的区别。查询vs BODY。请求正文可以包含一个JSON。JSON属性(例如,
    [JsonProperty(PropertyName='')
    )可以被使用。。。在这种情况下没有。我知道坏消息;(
    [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; }
    }