我正在尝试反序列化从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");
}

但是,它给出错误:无法将System.String强制转换或转换为App1.ApiResultApp.Authentication = JsonConvert.DeserializeObject<ApiResult>(r);
App.Authentication:
public static ApiResult Authentication = new ApiResult();`

JSON字串:



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

完整的错误消息:

最佳答案

看来您收到的json已被序列化两次-首先从ApiResultstring,然后再次到string:

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

调试器可能会添加第一个双引号,但是第二个双引号(转义的\"一个)实际上似乎是您正在处理的数据的一部分。该错误消息也这样有意义,它会反序列化string,然后尝试将其转换为ApiResult

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

10-05 23:53