当前位置: 首页 > 知识库问答 >
问题:

无法强制转换或转换系统。字符串到类对象

易衡
2023-03-14

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

然而,它给出了一个错误:无法强制转换或转换系统。字符串到App1。ApiResultApp。身份验证=JsonConvert。反序列化对象

应用程序。身份验证:

public static ApiResult Authentication = new ApiResult();`

JSON字符串:

"\"{\\"状态\\":\\"0\\",\\"消息\\":{\\"ID\\":5,\\"FirstName\\":\\"John\\",\\"LastName\\":\\"Doe\\",\\"Email\\":\\"testemail@gmail.com\\",\\"密码\\"\":\\"testPass\\"、\\"CreationDate\\":\\"2016-10-26T15:01:08\\"、\\"RoleID\\": 1、\\"门码\\": 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; }
}

完整的错误消息:

{“转换值时出错\“{\”状态\“:\”0\“,\”消息\“:{\”ID\”:5、\”名字\“:”约翰\“,”姓氏\“:”Doe \“,”电子邮件\“:\”testemail@gmail.com\“,”Password\“:”testPass\“,”CreationDate\“:”2016-10-26T15:01:08\“,”RoleID\”:1,““doorCode\”:9999}}\”键入“App1”。“结果”。路径“”,第1行,位置232。"}


共有3个答案

管景天
2023-03-14

你的数据模型,

   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:

要解决问题,请点击这里查看应用程序。客户GetUser();

轩辕弘雅
2023-03-14

下面的代码按照C.Evenhui的回答为我工作,

   var content = response.Content;              
   var jsonResult = JsonConvert.DeserializeObject(content).ToString();
   var result= JsonConvert.DeserializeObject<Model>(jsonResult);

这里的内容类似于-“\”{\\“Id\\”:\\“92209\\”,\\“operatorId\\”:100000,\\“Status\\”:true。。。。。

公冶子安
2023-03-14

您收到的json似乎已被序列化两次——首先从apireultstring,然后再到string

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

第一个双引号可能是由您的调试器添加的,但是第二个(转义的\")似乎确实是您正在处理的数据的一部分。通过这种方式,错误消息也有意义,它反序列化了一个字符串,然后尝试将其强制转换为一个ApiResult

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

 类似资料:
  • 问题内容: 我要求Google帮我,我没有运气。:-(以下是产生错误的特定代码: 整个功能如下: 如果我错过了一些愚蠢的事情,请原谅我。谁能告诉我是什么引起了这个问题??? 问题答案: 问题在于$ uname是一个对象,而不是字符串。您需要调用$ uname的方法之一来访问数据。 应该这样做(或上述解决方案之一)。

  • 问题内容: 我在一个名为Film_Release的字段中有一个表,该表的字符串值格式为 2012 年 4月20日 ( 星期五) 我正在遍历,我想在日期时间将它们转换并将其推出到另一个表中。我的第二张表有一个名为Films_Date的列,其格式为DATE。我收到此错误 DateTime类的对象无法转换为字符串 然后,我通过插入命令将$ newdate插入表中。 为什么会出现这样的错误? 问题答案:

  • 我有JSON文件看起来像 所以这个键是一个字符串“SUBS_ID”,这个值是一个名为Feature细节的模型,它包含属性“特性设置名称、特性名称、...”。所以我用这样google.json库从JSON文件中读取, 然后我试图循环这个HashMap获取值,并将其转换为我的Feature细节模型, 这是我的FeatureDetails模型, 但我得到了一个例外"com.google.gson.int

  • 我得到以上的错误,如果有人知道,然后告诉我。。。我将非常感激 Java: XML:

  • 下面是托管活动片段: 有问题的行是代码段的最后一行。这是我的语录片段。 假设我对主机活动没有扩展support.v4的看法是正确的,那么我该怎么做呢?

  • 我有一个家庭作业要重构一些代码来使用泛型。我觉得我为类做得很对。这是我的东西 当涉及到实例化时,我得到一个ClassCastException错误: 线程“main”java.lang.ClassCastException中出现异常:类java.lang.String无法强制转换为类edu.csc.node(java.lang.String位于加载程序“bootstrap”的模块java.base