WebAPI Modèle Personnalisé de liaison du complexe objet abstrait
C'est une question difficile. J'ai un problème avec la liaison d'un modèle de JSON. Je suis en essayant de résoudre les polymorphes-allié de l'enregistrement fourni avec le type d'enregistrement qui sera résolu (je veux être en mesure d'ajouter de nombreux types d'enregistrement dans le futur). J'ai tenté d'utiliser le l'exemple suivant pour résoudre mon modèle lors de l'appel de l'extrémité cependant, cet exemple ne fonctionne que pour MVC et Web API des applications.
J'ai tenté de l'écrire à l'aide IModelBinder et BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext). Cependant je ne trouve pas l'équivalent de ModelMetadataProviders dans le Système.Web.Espace de noms Http.
D'apprécier l'aide n'importe qui peut donner.
J'ai une Web API 2 application qui a la suite de la structure de l'objet.
public abstract class ResourceRecord
{
public abstract string Type { get; }
}
public class ARecord : ResourceRecord
{
public override string Type
{
get { return "A"; }
}
public string AVal { get; set; }
}
public class BRecord : ResourceRecord
{
public override string Type
{
get { return "B"; }
}
public string BVal { get; set; }
}
public class RecordCollection
{
public string Id { get; set; }
public string Name { get; set; }
public List<ResourceRecord> Records { get; }
public RecordCollection()
{
Records = new List<ResourceRecord>();
}
}
Structure JSON
{
"Id": "1",
"Name": "myName",
"Records": [
{
"Type": "A",
"AValue": "AVal"
},
{
"Type": "B",
"BValue": "BVal"
}
]
}
C'est l'exemple que j'utilise dans ma question. La réponse à cette question est pour la liaison de modèle MVC et j'ai besoin de l'API Web de la liaison de modèle.
OriginalL'auteur garyamorris | 2016-05-17
Vous devez vous connecter pour publier un commentaire.
Après quelques recherches, j'ai découvert que les fournisseurs de métadonnées n'existent pas au sein de WebAPI, et afin de se lier au complexe abstrait des objets, vous devez écrire votre propre.
J'ai commencé par l'écriture d'un nouveau modèle de liaison de la méthode, avec l'utilisation d'un nom du type personnalisé sérialiseur JSon et enfin j'ai mis à jour mon point de terminaison d'utiliser le classeur personnalisé. Il vaut la peine de souligner ce qui suit ne fonctionne qu'avec les demandes dans le corps, vous aurez à écrire quelque chose d'autre pour les demandes dans l'en-tête. Je suggère une lecture du chapitre 16 d'Adam Freeman Expert ASP.NET Web API 2 pour MVC Développeurs et complexe de liaison de l'objet.
J'ai été en mesure de sérialiser mon objet dans le corps de la demande à l'aide du code suivant.
WebAPI configuration
Modèle de liaison personnalisé
La Sérialisation personnalisée de liaison
Définition du point final
return false;
instruction dans leBindModel
la mise en œuvre du code inaccessible?OriginalL'auteur garyamorris
La TypeNameSerializationBinder classe n'est plus nécessaire, ainsi que la WebApiConfig de configuration.
Tout d'abord, vous devez créer enum pour le type d'enregistrement:
Ensuite, modifiez votre champ "Type" dans ResourceRecord à l'énumération que nous venons de créer:
Maintenant, vous devez créer ces 2 classes:
Modèle De Classeur
Classe de convertisseur de
Contrôleur
OriginalL'auteur MasterPiece