J'ai une méthode qui prend un modèle [AccountLinkRequest] en tant que paramètre avec des données codées en url. Il est utilise Json.NET par défaut, et aussi, je ne peux pas utiliser le paramètre UseDataContractJsonSerializer = true parce que je suis modèle de réponse de sortie générique (dans d'autres méthodes)Échec de la désérialisation de Web.Api pour un paramètre de modèle avec un nom différent
[HttpPost]
public SomeResponse Link(AccountLinkRequest request)
{
if (request.CustomerId == null)
throw new Exception("Deserialization error here, pls help!");
// other actions
}
Voici ma classe de modèle:
[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; }
}
Le problème: request.CustomerId est AllWays null. La demande est assez simple:
web_service_URL/link = customer_id customer_id & id = id (url-encoded)
si j'utilise CUSTOMER_ID au lieu de CustomerId, tout ira bien, mais je suis sur un jedy? -façon. Je vous remercie!
Radim, merci pour votre réponse. Je ne peux toujours pas croire que DataMember/JsonProperty ne le servent pas. C'est la même chose qu'avec ORM, nous ne pouvions pas définir ses propres noms de propriétés au lieu d'utiliser des noms de colonnes. Btw il y avait JSON.NET 5.0+ mise à jour, mais rien n'a changé – EvgeniyK
Dans ce cas, nous parlons de ModelBinder. Nous voulons changer une requête (partie de la chaîne de requête) à convertir en objet. Seules les 3 méthodes mentionnées ci-dessus sont disponibles. Ce dont vous parlez, c'est l'analyse du CORPS. Et pour cela, nous utilisons MediaFormatters. Et ceux-ci pourraient être très puissants, modifiables, extandables ... Donc, il y a la plus grande différence. Requête vs BODY. Le corps de la demande peut contenir un attribut JSON JSON (par exemple '[JsonProperty (PropertyName = '')]') pourrait être utilisé ... pas dans ce cas. mauvaises nouvelles je sais; ( –
Maintenant je vois, merci! – EvgeniyK