I am trying to deserialize a JSON string received from a Web API
try
{
string r = await App.client.GetUser();
App.Authentication = JsonConvert.DeserializeObject<ApiResult>(r);
await DisplayAlert("TEST", App.Authentication.ToString(), "OK");
Application.Current.MainPage = new Schedule();
}
catch (Exception p)
{
await DisplayAlert("Getting Authentication failed", p.ToString(), "TEST");
}
However it gives the error: Could not Cast or Convert System.String to App1.ApiResult
App.Authentication = JsonConvert.DeserializeObject<ApiResult>(r);
App.Authentication:
public static ApiResult Authentication = new ApiResult();`
JSON string:
"\"{\\"status\\":\\"0\\",\\"message\\":{\\"ID\\":5,\\"FirstName\\":\\"John\\",\\"LastName\\":\\"Doe\\",\\"Email\\":\\"[email protected]\\",\\"Password\\":\\"testPass\\",\\"CreationDate\\":\\"2016-10-26T15:01:08\\",\\"RoleID\\":1,\\"doorCode\\":9999}}\""
ApiResult Class:
public class ApiResult
{
public string status { get; set; }
public Account message { get; set; }
}
Account Class:
public class Account
{
public string status { get; set; }
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public DateTime CreationDate { get; set; }
public int RoleID { get; set; }
public int doorCode { get; set; }
}
The full error message:
{"Error converting value \"{\"status\":\"0\",\"message\":{\"ID\":5,\"FirstName\":\"John\",\"LastName\":\"Doe\",\"Email\":\"[email protected]\",\"Password\":\"testPass\",\"CreationDate\":\"2016-10-26T15:01:08\",\"RoleID\":1,\"doorCode\":9999}}\" to type 'App1.ApiResult'. Path '', line 1, position 232."}
It appears that the json you receive has been serialized twice - first from ApiResult
to string
, then to string
again:
"\"{\\"status\\":\\"0\\",\\"message\\":...
The first double-quote might be added by your debugger, but the second (the escaped \"
one) really appears to be part of the data you're processing. The error message also makes sense this way, it deserializes a string
and then attempts to cast it to an ApiResult
.
Try deserializing the data as a string and then deserializing its result to an ApiResult
, to be sure this is the case - and if so, the server code will need to be changed.
Below code worked for me along the lines of to C.Evenhuis answer,
var content = response.Content;
var jsonResult = JsonConvert.DeserializeObject(content).ToString();
var result= JsonConvert.DeserializeObject<Model>(jsonResult);
Here Content is similar to - "\"{\\"Id\\":\\"92209\\",\\"operatorId\\":100000,\\"Status\\":true, .....
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