Sup*_*420 16 c# serialization json
我试图反序列化从Web API收到的JSON字符串
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");
}
Run Code Online (Sandbox Code Playgroud)
但是它给出了错误:无法将System.String转换或转换为App1.ApiResult
App.Authentication = JsonConvert.DeserializeObject<ApiResult>(r);
App.Authentication:
public static ApiResult Authentication = new ApiResult();`
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
账户类别:
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; }
}
Run Code Online (Sandbox Code Playgroud)
完整的错误消息:
{"转换值错误\"{\"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."}
C.E*_*uis 34
看来,您会收到JSON已经系列化两次-第一次从ApiResult到string,然后string再:
"\"{\\"status\\":\\"0\\",\\"message\\":...
Run Code Online (Sandbox Code Playgroud)
第一个双引号可能由调试器添加,但第二个(转义的\")实际上似乎是您正在处理的数据的一部分.错误消息也是有道理的,它反序列化a string然后尝试将其强制转换为ApiResult.
尝试将数据反序列化为字符串,然后将其结果反序列化为ApiResult,以确保是这种情况 - 如果是这样,则需要更改服务器代码.
Gur*_*uru 12
下面的代码按照 C.Evenhuis 的回答对我有用,
var content = response.Content;
var jsonResult = JsonConvert.DeserializeObject(content).ToString();
var result= JsonConvert.DeserializeObject<Model>(jsonResult);
Run Code Online (Sandbox Code Playgroud)
这里的内容类似于 - "\"{\\"Id\\":\\"92209\\",\\"operatorId\\":100000,\\"Status\\":true, .... .
| 归档时间: |
|
| 查看次数: |
21153 次 |
| 最近记录: |