2015-11-17 3 views
4

Je suis en train de programmer une implémentation C# pour le Qualtrics API (v 2.5) en utilisant RestSharp. Lors de l'appel de la méthode getUserIds, il renvoie une liste d'utilisateurs au format JSON (voir l'exemple de sortie ci-dessous).REST Api retournant différents noms d'objets pour le même objet, comment gérer avec RestSharp?

Le problème/question I face est que, pour chaque objet utilisateur (la liste des objets sous Result) il génère un identifiant différent, en commençant par URH_. En utilisant json2csharp il suppose bien sûr que c'est toujours une classe différente, alors qu'en fait c'est absolument le même que vous pouvez voir dans la sortie, et comme cela est indiqué dans la documentation de l'API. Comment puis-je résoudre au mieux cela - afin que je puisse faire une classe UserData que je peux réutiliser? Parce que maintenant je vois toujours ces classes préfixées URH_ dans chaque réponse.

NOTE: Je pensais que je pourrais essayer de masser la première réponse, et quand je reçois la réponse remplacer chaque URH_ objet préfixé sous l'objet racine Result avec une "UserData" chaîne - mais je pense que ce enfreint les règles un peu, et pensé que la communauté aurait une meilleure solution?


est inférieure à la sortie JSON brut (note que j'ai supprimé des informations sensibles):

{"Meta":{"Status":"Success","Debug":""},"Result":{"URH_3wpA9pxGbE0c7Xu":{"DivisionID":null,"UserName":"[email protected]","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_4SjjZmbPphZGKDq","UserEmail":"[email protected]","UserAccountStatus":"Active"},"URH_57vQr8MVXgpcPUo":{"DivisionID":"DV_XXXXXXXX","UserName":"[email protected]","UserFirstName":"X","UserLastName":"X","UserAccountType":"UT_BRANDADMIN","UserEmail":"[email protected]","UserAccountStatus":"Active"},"URH_6ujW1EP0QJOUaoI":{"DivisionID":"DV_XXXXXXXYZ","UserName":"[email protected]","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_XXXXXABCD","UserEmail":"[email protected]","UserAccountStatus":"Active"}}} 

C'est ce que je reçois lors de la génération d'un modèle à l'aide json2csharp:

public class Meta 
{ 
    public string Status { get; set; } 
    public string Debug { get; set; } 
} 

public class URH3wpA9pxGbE0c7Xu 
{ 
    public object DivisionID { get; set; } 
    public string UserName { get; set; } 
    public string UserFirstName { get; set; } 
    public string UserLastName { get; set; } 
    public string UserAccountType { get; set; } 
    public string UserEmail { get; set; } 
    public string UserAccountStatus { get; set; } 
} 

public class URH57vQr8MVXgpcPUo 
{ 
    public string DivisionID { get; set; } 
    public string UserName { get; set; } 
    public string UserFirstName { get; set; } 
    public string UserLastName { get; set; } 
    public string UserAccountType { get; set; } 
    public string UserEmail { get; set; } 
    public string UserAccountStatus { get; set; } 
} 

public class URH6ujW1EP0QJOUaoI 
{ 
    public string DivisionID { get; set; } 
    public string UserName { get; set; } 
    public string UserFirstName { get; set; } 
    public string UserLastName { get; set; } 
    public string UserAccountType { get; set; } 
    public string UserEmail { get; set; } 
    public string UserAccountStatus { get; set; } 
} 

public class Result 
{ 
    public URH3wpA9pxGbE0c7Xu URH_3wpA9pxGbE0c7Xu { get; set; } 
    public URH57vQr8MVXgpcPUo URH_57vQr8MVXgpcPUo { get; set; } 
    public URH6ujW1EP0QJOUaoI URH_6ujW1EP0QJOUaoI { get; set; } 
} 

public class RootObject 
{ 
    public Meta Meta { get; set; } 
    public Result Result { get; set; } 
} 

Répondre

7

C'est simple - il suffit d'utiliser Dictionary<string, UserData> type générique pour Result champ:

public class Response 
{ 
    public Meta Meta { get; set; } 
    public Dictionary<string, UserData> Result { get; set; } 
} 

public class Meta 
{ 
    public string Status { get; set; } 
    public string Debug { get; set; } 
} 

public class UserData 
{ 
    public string DivisionID { get; set; } 
    public string UserName { get; set; } 
    public string UserFirstName { get; set; } 
    public string UserLastName { get; set; } 
    public string UserAccountType { get; set; } 
    public string UserEmail { get; set; } 
    public string UserAccountStatus { get; set; } 
} 
+1

Merci, je vais essayer cela et revenir à vous! –

+1

Juste pour confirmer, a travaillé pour moi a-ok de cette façon. Stupide je ne suis pas venu avec moi-même, nouveau pour consommer API REST;) ... –