C # Failed to enable or convert System.String to Class object

I am trying to deserialize a JSON string retrieved 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 an error: Failed to enable 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 ", \\" \\ e-mail ": \\" testemail@gmail.com \\ ", \\" \\ Password ": \ \ "testPass \\" \\ "CreationDate \\": \\ "2016-10-26T15: 01: 08 \\", \\ "\\ Role ID": 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; } } 

Full error message:

{"Error conversion value \" {\ "Status \": \ "0 \" \ "message \": {\ "ID \": 5, \ "FirstName \": \ "John \", \ "LastName \ ": \" Doe \ "\" Send \ ": \" testemail@gmail.com \ ", \" Password \ ": \" testPass \ ", \" CreationDate \ ": \" 2016-10-26T15: 01: 08 \ "\" Role ID \ ": 1, \" doorCode \ ": 9999}} \" to enter "App1.ApiResult". Path '', line 1, position 232. " }

+5
source share
3 answers

It looks like the resulting json has been serialized twice - first from ApiResult to string , and then to string again:

 "\"{\\"status\\":\\"0\\",\\"message\\":... 

The first double quote may be added by your debugger, but the second (escaped \" ) is really part of the data you are processing. The error message also makes sense so it deserializes the string and then tries to pass it to ApiResult .

Try to deserialize the data as a string and then deserialize its result to ApiResult to make sure that it is, and if so, the server code will need to be changed.

+15
source

your data model

  var r = new ApiResult { status = "0", message = new Account() { status = "0", CreationDate = DateTime.Now, Email = " foo@foo.com ", FirstName = "Trump", ID = 1, LastName = "Fck", Password = "111", RoleID = 1, doorCode = 222 } }; var jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(r); var apiObject = Newtonsoft.Json.JsonConvert.DeserializeObject<ApiResult>(jsonResult); 

jsonResult:

enter image description here

for the problem see here App.client.GetUser ();

0
source

Try using App.Authentication = JObject.Parse (request.Content.ReadAsStringAsync (). Result);

-1
source

Source: https://habr.com/ru/post/1260351/


All Articles