2016-12-29 1 views
1

Je suis nouveau en C# et RestSharp.Obtention de valeurs nulles lors de la désérialisation d'une liste à l'aide de RestSharp

J'écris un petit programme pour récupérer une liste d'enregistrements via REST. J'ai été capable de récupérer un enregistrement. Maintenant j'ai besoin d'une liste d'enregistrements, et j'ai un problème ici.

La réponse que je reçois à l'aide SoapUI ressemble à ceci:

{ 
    "@count": 2, 
    "@start": 1, 
    "@totalcount": 2, 
    "Messages": [], 
    "ResourceName": "email", 
    "ReturnCode": 0, 
    "content": [ 
     {"email": {"evsysseq": "0000000000000262"}}, 
     {"email": {"evsysseq": "0000000000000263"}} 
    ] 
} 

Mon code ressemble à ceci:

class EmailID 
{ 
    public string Evsysseq { get; set; } 
} 

var client = new RestClient("xxxxx"); 
client.Authenticator = new HttpBasicAuthenticator("xxx", "xxx"); 
string queryParm = HttpUtility.UrlEncode("evsysseq>\"0000000000000261\""); 

var request = new RestRequest("xxxx?query="+ queryParm, Method.GET); 
request.RootElement = "content"; 
var queryResult = client.Execute<List<EmailID>>(request).Data; 

Son exécution ne donne pas lieu à des erreurs, et je peux voir sur l'objet queryResult qu'il contient deux enregistrements. Mais, Evsysseq est nul sur les deux, et c'est mon problème. Je ne suis pas sûr de savoir quoi modifier pour bien faire les choses.

Répondre

1

Vous obtenez des valeurs nulles car le fichier JSON que vous désérialisez ne correspond pas à la structure de classe dans laquelle vous désérialisez. Vous dites RestSharp désérialiser le tableau content dans un List<EmailID>, mais le JSON représente vraiment une liste des objets qui contiennentEmailID objets. Et si vous avez besoin d'une autre classe:

class EmailObj 
{ 
    public EmailID Email { get; set; } 
} 

Alors deserialize comme celui-ci et vous devriez obtenir les données:

var queryResult = client.Execute<List<EmailObj>>(request).Data; 

Si vous le souhaitez, vous pouvez ensuite utiliser LINQ pour obtenir le List<EmailID> que vous vouliez à l'origine comme ceci:

var emailIds = queryResult.Select(eo => eo.Email).ToList(); 

HTH

+0

Merci Brian. Travaillé parfaitement. Très appréciée. – Tommy

+0

Je suis heureux d'avoir pu aider. Joyeuses fêtes! –