Мы создаем RestService с Asp.Net WebApi. Но по какой-то причине свойство Name игнорируется в атрибуте DataMember при попытке десериализовать сложное свойство с атрибутом [FromURI].
Например, у нас может быть: Метод:
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; }
}
При десериализации user мы получаем имя пользователя, как ожидалось, но null для Active. С другой стороны, при сериализации данных мы получаем как isActive, так и username, как и ожидалось. Если мы отправляем запрос с Active в строке запроса, он работает как ожидалось.
Это, очевидно, проблема с 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, которое не используется при де-сериализации через application/x-www-form-urlencoded, но он не использует свойство [FromURI], но application/x-www-form-urlencoded, и он не был действительно решен.
Любые идеи, указатели или предложения будут высоко оценены.