Binding 具有不同名称的模型参数的Web.Api反序列化失败
我有一个方法,它将模型[AccountLinkRequest]作为带有url编码数据的参数。默认情况下,它使用Json.NET,而且,我不能使用设置UseDataContractJsonSerializer=true,因为我有通用的输出响应模型(在其他方法中) 这是我的模型课: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
[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,一切都会好起来,但我正在走捷径。谢谢大家! 如何做到这一点,没有一个简单的答案。有关更多详细信息,请阅读以下内容: 总结:
因此,例如,如果您创建能够使用某些属性的“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; }
}