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

Windows Communication Foundation .NET Discussion :

Parsing JSON vers Dictionary<string,object> dans OperationContract


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Parsing JSON vers Dictionary<string,object> dans OperationContract
    Bonsoir,

    Je cherche comment je pourrais implémenter IDispatchMessageFormatter.
    Je ne suis pas sur que ce soit bien cette interface qui doit être implémentée mais l'objectif est le suivant.

    Je voudrais ajouter des endpoints pour pouvoir faire les mise à jour partielles, donc PATCH.

    Nous avons déjà pas mal de endpoints en place. Ce que nous constatons, concernant les UPDATE, c'est qu'il faut que l'utilisateur fasse une lecture de l'objet complet avant d'y faire les modifications. Puis il envoie tout le DTO dans la méthode UPDATE.
    Nous trouvons cela plutôt lourd, c'est ce qui explique pourquoi je cherche à implémenter le concept de PATCH.

    Mon idée serait que l'utilisateur envoie ce type de JSON.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
        "adresseId":14253
        "patchData":
        [
            "CodePostal":68120,
            "Ville":"Eberensheim"
        ]
    }
    J'ai pensé à cette structure afin d'avoir les datas les plus légères à faire transiter.

    Cette structure de patchData me fait penser à un Dictionary<string,Object>.

    J'ai donc "implémenté" la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Patch(int adresseId, Dictionary<string,object> patchData)
    Mais cela ne fonctionne pas puisque les items de Dictionary sont des KeyValuePair avec pour chacun une Key et une Value.

    Il me faudrait donc envoyer ceci pour que cela puisse fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
        "adresseId":14253
        "patchData":
        [
            {
                "Key":"CodePostal",
                "Value":68120
            },
            {
                "Key":"Ville",
                "Value":"Eberensheim"
            }
        ]
    }
    Cela fonctionne, mais ceci ne nous plait pas du tout!

    J'ai fait pas mal de recherche sur le Web, j'ai trouvé ceci https://stackoverflow.com/questions/...40427#38440427

    Je ne sais pas du tout si cela fonctionne puisque je ne comprends pas du tout comment le mettre en place (Comment l'implémenter, ni dans quelle collection de quel objet il doit être injecté).

    Mais cela à bien l'air d'être ce que je recherche puisque la définition de l'interface est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface IDispatchMessageFormatter
    {
        void DeserializeRequest(Message message, object[] parameters);
        Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result);
    }
    Je cherche bien à "désérialiser" la request.
    Mais je ne trouve pas d'implémentation claire.

    Je me demande aussi comment faire pour que le formatter par défaut soit utilisé si le Formatter customisé ne "sait" pas traiter le message.

    Merci beaucoup pour vos conseils.

  2. #2
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    J'ai réussi à "implémenter" le IDispatchMessageFormatter et à l'intégrer dans la machinerie WCF.

    Cependant, il y a des choses étranges puisque je voulais justement me servir du IDispatchMessageFormatter pour pouvoir m'occuper de la déserialization du JSON en Dictionary<string,object> mais je dois traiter tous les paramètres de la méthode et pas uniquement le dictionary.

    Si j'utilise ce concept dans d'autres méthodes avec des paramètres différents, il faudra que je fasse une implémentation différente de IDispatchMessageFormatter.

    Je suis preneur de toute proposition me permettant de passer un json light de ce genre
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
         "data":
        {
            "Variable1":"bleu",
            "MonAutreVariable":1250
        }
    }

    Merci

Discussions similaires

  1. [Débutant] Deserialisation Json vers object
    Par Armakorhall dans le forum C#
    Réponses: 3
    Dernier message: 27/09/2012, 09h42
  2. Parse XML/JSON vers Spinner
    Par JBusnel dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 19/09/2012, 18h41
  3. [PHP 5.3] Parser Json vers MySQL arrays & objects
    Par jack77b dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2012, 16h08
  4. Problème avec StingTokenizer vers tableau de String
    Par Invité dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 06/10/2006, 12h22
  5. parse JSON et expression régulière
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/06/2006, 17h39

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