C # no pudo convertir o convertir System.String en objeto de clase

Estoy intentando deserializar una cadena JSON recibida de una API web

try { string r = await App.client.GetUser(); App.Authentication = JsonConvert.DeserializeObject(r); await DisplayAlert("TEST", App.Authentication.ToString(), "OK"); Application.Current.MainPage = new Schedule(); } catch (Exception p) { await DisplayAlert("Getting Authentication failed", p.ToString(), "TEST"); } 

Sin embargo, da el error: No se pudo convertir o convertir System.String a App1.ApiResult App.Authentication = JsonConvert.DeserializeObject(r);

App.Authentication:

 public static ApiResult Authentication = new ApiResult();` 

Cadena JSON:

“\” {\\ “status \\”: \\ “0 \\”, \\ “message \\”: {\\ “ID \\”: 5, \\ “FirstName \\”: \\ ” John \\ “, \\” Apellido \\ “: \\” Doe \\ “, \\” Correo electrónico \\ “: \\” testemail@gmail.com \\ “, \\” Contraseña \\ “: \ \ “testPass \\”, \\ “CreationDate \\”: \\ “2016-10-26T15: 01: 08 \\”, \\ “RoleID \\”: 1, \\ “doorCode \\”: 9999 }} \ “”

Clase de ApiResult:

 public class ApiResult { public string status { get; set; } public Account message { get; set; } } 

Clase de cuenta:

 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; } } 

El mensaje de error completo:

{“Error al convertir el valor \” {\ “estado \”: \ “0 \”, \ “mensaje \”: {\ “ID \”: 5, \ “Nombre>”: \ “Juan \”, \ “Apellido \ “: \” Doe \ “, \” Email \ “: \” testemail@gmail.com \ “, \” Password \ “: \” testPass \ “, \” CreationDate \ “: \” 2016-10-26T15 : 01: 08 \ “, \” RoleID \ “: 1, \” doorCode \ “: 9999}} \” para escribir ‘App1.ApiResult’. Path ”, línea 1, posición 232. “}

Parece que el json que recibe ha sido serializado dos veces: primero de ApiResult a string , y luego a string nuevo:

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

Su depurador podría agregar la primera comilla doble, pero la segunda (la que se escapó) realmente parece ser parte de los datos que está procesando. El mensaje de error también tiene sentido de esta manera, deserializa una string y luego Intenta ApiResult a un ApiResult .

Intente deserializar los datos como una cadena y luego deserializar su resultado a un ApiResult , para asegurarse de que este sea el caso, y si es así, será necesario cambiar el código del servidor.

su modelo de datos,

  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(jsonResult); 

jsonResultar

introduzca la descripción de la imagen aquí

para ver el problema aquí App.client.GetUser ();

Intente usar App.Authentication = JObject.Parse (request.Content.ReadAsStringAsync (). Result);