Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserializing JToken content to an Object

I want to deserialize JToken content to an object (User). How am I able to do this?

Here is my json string:

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

This being sent to an api parameter as JToken.

User class:

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

Web Api Method:

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

API Invocation in 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()); 
like image 953
Robert Mansion Avatar asked Feb 13 '15 03:02

Robert Mansion


People also ask

What is the difference between JToken and JObject?

JToken is the base class for all JSON elements. You should just use the Parse method for the type of element you expect to have in the string. If you don't know what it is, use JToken, and then you'll be able to down cast it to JObject, JArray, etc. In this case you always expect a JObject, so use that.

What does JToken parse do?

Parse() to parse a JSON string you know to represent an "atomic" value, requiring the use of JToken. Parse() in such a case. Similarly, JToken. FromObject() may be used to serialize any sort of c# object to a JToken hierarchy without needing to know in advance the resulting JSON type.

What is JToken in C#?

JToken is the abstract base class of JObject , JArray , JProperty , and JValue , which represent pieces of JSON data after they have been parsed. JsonToken is an enum that is used by JsonReader and JsonWriter to indicate which type of token is being read or written.

What does Jsonconvert return?

Return ValueThe deserialized object from the JSON string.


1 Answers

You can use JToken.ToObject generic method. http://www.nudoq.org/#!/Packages/Newtonsoft.Json/Newtonsoft.Json/JToken/M/ToObject(T)

Server API Code:

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

Here is the client code I use.

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; 

The object gets converted to Users array without any issues.

like image 102
Parthasarathy Avatar answered Sep 18 '22 14:09

Parthasarathy