我们正在使用Asp.Net WebApi创建RestService.但是由于某些原因,在尝试使用[FromURI]属性反序列化复杂属性时,DataMember属性中的Name属性被忽略.
例如我们可能有:
方法:
public IHttpActionResult Get([FromUri]User user)
模型:
[DataContract] public class User { [DataMember(Name = "username")] public string Username{ get; set; } [DataMember(Name = "isActive",Isrequired = false)] public bool? Active { get; set; } }
反序列化用户时,我们按预期获取用户名,但对于Active为null.另一方面,当序列化数据时,我们同时获得了isActive和用户名.如果我们发送查询字符串中的活动请求,它按预期工作.
这显然是IModelBinder的问题.由于某些原因,它不使用DataMember的Name属性.我检查了什么格式化器被包括和4个默认的注册:
System.Net.Http.Formatting.JsonMediaTypeFormatter System.Net.Http.Formatting.XmlMediaTypeFormatter System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter System.Net.Http.Formatting.JQueryMvcFormUrlEncodedFormatter
我没有办法根据要求检查哪一个.我会假设它的FormUrlEncodedMediaTypeFormatter但我不能确定.另外,我不知道如果它甚至支持Name属性.
我已经检查了一个解决方案和最接近的主题,我可以找到是WebAPI DataMember Name not used when de/serializing via application/x-www-form-urlencoded,但它不使用[FromUri]但应用程序/ x-www-form-urlencoded属性,它没有真正解决.
任何想法,指点或建议将不胜感激.