0
votes

API ASP.NET Web API Obtenez DTO du corps avec type d'interface

Je veux créer un [httppost] code> méthode du contrôleur. Comme vous pouvez le voir ci-dessous, j'ai une classe avec deux propriétés de type ibaseclass code>. C'est parce que ces propriétés peuvent être soit de type myClassa code> ou myClassb code>.

J'ai eu mes dtos comme ceci: p>

[HttpPost]
public ActionResult Post([FromBody]MyDtoToGet myDtoToGet)
{
    // Problem here -> myDtoToGet is null!
}


1 commentaires

Comment le désérialiseur va-t-il deviner quel type à utiliser? Les DTO sont censés être simples. Json elle-même ne sait rien sur l'héritage


3 Réponses :


0
votes

Si vous souhaitez obtenir des données sous forme de MyDtotoget code> classe. Le JSON devrait être au format suivant. La raison pour laquelle vous avez obtenu null code> est dû au format JSON non valide étant passé.

{
    "MyId": 1,
    "base1": {
        "Id": 2,
        "PropertyA": "any string"
    },
    "base2": {
        "Id": 3,
        "PropertyA": "any string"
    }
}


0 commentaires

0
votes

Assurez-vous de ne pas oublier de définir «Type de contenu: Application / JSON» sur votre demande, et que le format JSON de vos données correspond à votre DTO.

meilleur à essayer avec simple DTO pour commencer.


0 commentaires

0
votes

Je l'ai résolu en acceptant un Jobject au lieu d'un mydtotoget du corps JSON. Ensuite, j'ai converti manuellement le type des interfaces au type correct. À la fin, j'ai créé un nouvel objet et ajouté les objets convertis.

merci de toute façon.


1 commentaires

Pouvez-vous placer votre code mis à jour, comme votre convertie en jobject .. Je suis confronté à un problème similaire