web-dev-qa-db-fra.com

Désérialisation du contenu JToken en un objet

Je souhaite désérialiser le contenu JToken en un objet (User). Comment puis-je faire cela?

Voici ma chaîne json:

string json = @"[{""UserId"":0,""Username"":""jj.stranger"",""FirstName"":""JJ"",""LastName"":""stranger""}]";

Ceci étant envoyé à un paramètre api comme JToken.

Classe d'utilisateurs:

public class user
{
    public int UserId {get; set;}
    public string Username {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

Méthode Web Api:

public IHttpActionResult Post([FromBody]JToken users)
{
       UserModel.SaveUser(users);
       //...
}

Invocation d'API dans Salesforce:

string json = '[{"UserId":0,"Username":"jj.stranger","FirstName":"JJ","LastName":"stranger"}];
HttpRequest req = new HttpRequest();
HttpResponse res = new HttpResponse();
Http http = new Http();

req.setEndpoint('test.com/api/UserManagement');
req.setMethod('POST');
req.setBody(json);
req.setHeader('Content-Type', 'application/json');

try {
    res = http.send(req);
} catch(System.CalloutException e) {
    System.debug('Callout error:' + e);
}

System.debug(res.getBody());
24
Robert Mansion

Vous pouvez utiliser la méthode générique JToken.ToObject. http://www.nudoq.org/#!/Packages/Newtonsoft.Json/Newtonsoft.Json/JToken/M/ToObject (T)

Code API du serveur:

 public void Test(JToken users)
 {
     var usersArray = users.ToObject<User[]>();
 }

Voici le code client que j'utilise.

string json = "[{\"UserId\":0,\"Username\":\"jj.stranger\",\"FirstName\":\"JJ\",\"LastName\":\"stranger\"}]";
HttpClient client = new HttpClient();
var result = client.PostAsync(@"http://localhost:50577/api/values/test", new StringContent(json, Encoding.UTF8, "application/json")).Result;

L'objet est converti en tableau Utilisateurs sans aucun problème.

45
Sarathy