C#无法将System.String转换或转换为Class对象

我试图反序列化从Web API收到的JSON字符串

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

但是它给出了错误:无法将System.String转换或转换为App1.ApiResult App.Authentication = JsonConvert.DeserializeObject(r);

App.Authentication:

 public static ApiResult Authentication = new ApiResult();` 

JSON字符串:

“\”{\\ “状态\\”:\\ “0 \\”,\\ “消息\\”:{\\ “ID \\”:5,\\ “姓\\”:\\”约翰\\”,\\ “名字\\”:\\ “李四\\”,\\ “电子邮件\\”:\\ “testemail@gmail.com \\”,\\ “密码\\”:\ \ “testPass \\”,\\ “CreationDate \\”:\\ “2016-10-26T15:01:08 \\”,\\ “角色ID \\”:1,\\ “doorCode \\”:9999 }} \ “”

ApiResult类:

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

账户类别:

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

完整的错误消息:

{“转换值时出错\”{\“status \”:\“0 \”,\“message \”:{\“ID \”:5,\“FirstName \”:\“John \”,\“LastName \ “:\” 李四\ “\ ”电子邮件\“:\ ”testemail@gmail.com \“,\ ”密码\“:\ ”testPass \“,\ ”CreationDate \“:\” 2016-10-26T15 :01:08 \“,\”RoleID \“:1,\”doorCode \“:9999}} \”键入’App1.ApiResult’。路径”,第1行,位置232.“}

看来你收到的json已经被序列化了两次 – 首先是从ApiResultstring ,然后是再次string起来:

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

第一个双引号可能由调试器添加,但第二个(转义的\"一个”)实际上似乎是您正在处理的数据的一部分。错误消息也是有意义的,它反序列化string然后试图把它投射到ApiResult

尝试将数据反序列化为字符串, 然后将其结果反序列化为ApiResult ,以确保是这种情况 – 如果是这样,则需要更改服务器代码。

你的数据模型,

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

jsonResult:

在此处输入图像描述

问题看这里App.client.GetUser();

尝试使用App.Authentication = JObject.Parse(request.Content.ReadAsStringAsync()。Result);