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());
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.
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.
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.
Return ValueThe deserialized object from the JSON string.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With