IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

problème de conversion


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut problème de conversion
    Bonjour,
    J'ai utilisé NSwag qui est installé par défaut dans Visual Studio 2022 pour générer un client csharp à partir d'un swagger/openAPI (celui=ci : https://github.com/binance/binance-a.../spot_api.yaml)
    Il me génère cependant du code qui ne compile pas... J'ai corrigé quelques éléments déjà mais il ne m'en reste plus qu'un :
    error CS0266: Impossible de convertir implicitement le type 'System.Collections.ObjectModel.Collection<System.Collections.ObjectModel.Collection<string>>' en 'System.Collections.Generic.ICollection<System.Collections.Generic.ICollection<string>>'. Une conversion explicite existe (un cast est-il manquant*?)
    Voici la définition dans le code csharp auto-généré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public System.Collections.Generic.ICollection<System.Collections.Generic.ICollection<string>> Bids { get; set; } = new System.Collections.ObjectModel.Collection<System.Collections.ObjectModel.Collection<string>>();
    Voici la définition liée dans le yaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                      bids:
                        type: array
                        items:
                            type: array
                            items:
                              type: string
                              minItems: 2
                              maxItems: 2
    Savez-vous comment caster ce tableau de tableau de 2 string du coup s'il vous plaît ? Important : il faut conserver les objets System.Collections.Generic.ICollection et System.Collections.ObjectModel.Collection
    Merci pour votre aide,

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 966
    Par défaut
    Citation Envoyé par jmclej Voir le message
    Important : il faut conserver les objets System.Collections.Generic.ICollection et System.Collections.ObjectModel.Collection
    Pourquoi conserver ces types ?
    Il ne sont pas compatibles et c'est ce que te dis le message d'erreur.
    Le message de dit également que tu peux forcer un cast mais en règle générale cela déclenche d'autres problèmes.

    Pour moi la structure du YAML attend quelque chose de beaucoup plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<List<String>> Bids { get; set; } = new List<List<String>>();

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Merci pour le retour.
    Oui j'ai vu que l'on pourrait passer par des objets plus simples mais j'avoue que je souhaiterais conserver une cohérence avec le reste du code généré qui arrive bien à se satisfaire des 2 objets System.Collections.Generic.ICollection et System.Collections.ObjectModel.Collection, de peur que cela ait des impacts en runtime (le reste du code est écrit en fonction du mode de fonctionnement d'une Collection, qui n'est pas le même qu'une Liste par exemple, et ça pourrait probablement amener à des erreurs, difficiles à détecter en plus et avec des conséquences importantes). Et vu la sensibilité de l'API (API financière), je préfère différer le moins possible de ce qui est généré par NSwag qui a malgré mon problème une certaine expertise validée sûrement vu que c'est installé par défaut dans Visual Studio.
    Voici un exemple ci=dessous qui montre la compatibilité de ces 2 objets.
    Code csharp auto-généré par NSwag et qui compile bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public System.Collections.Generic.ICollection<string> MarginablePairs { get; set; } = new System.Collections.ObjectModel.Collection<string>();
    Partie du yaml correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        marginablePairs: 
                          type: array
                          items: 
                            type: string

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 966
    Par défaut
    Citation Envoyé par jmclej Voir le message
    de peur que cela ait des impacts en runtime (le reste du code est écrit en fonction du mode de fonctionnement d'une Collection, qui n'est pas le même qu'une Liste par exemple, et ça pourrait probablement amener à des erreurs, difficiles à détecter en plus et avec des conséquences importantes).
    C'est une API REST.
    Autrement dit cela demande du JSON en entrée et ça fournit du JSON s'il y a un retour.
    Ces objets ne sont là que pour faciliter l'écriture du code mais au final ils seront serialisés en JSON et pour cela que se soit des Collection ou List venant d'un namespace ou d'un autre, cela ne fait aucun différence. A la fin une simple chaîne sera transmise à l'API et ta propriété Bids sera transmise sous cette forme.

    "Bids" : [["bid1","bid2"],["bid3","bid4"],["bid5","bid6"]].

    En plus, un outil (qui en passant n'est pas inclus à Visual Studio puisqu'il s'agit d'un NuGet sous licence MIT) qui te génère du code qui ne compile pas, je lui ferai très peu confiance.

    Si ton but c'est d'avoir un client pour tester l'API, utilise Postman. Tu pourras lui fournir ton YAML et il te créera automatiquement les requêtes HTTP. Il te permettra ensuite de générer du code dans le langage de ton choix (et sur lequel tu n'aura pas besoin de revenir).

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo