【问题标题】:Recover objects from response.Content.ReadAsStringAsync()从 response.Content.ReadAsStringAsync() 中恢复对象
【发布时间】:2020-11-07 07:38:51
【问题描述】:

我有一个通过 API 发送的 Json 对象列表:

    {
  "Pr": {
    "ClientProfil": {
      "IdClient": 67,
      "FirmName": null,
      "NumMember": "OPTOO111",
      "FirstName": "EL MONAGI",
      "LastName": "ABDELJALIL",
      "Email": "jalil_monagi@yahoofr",
      "Adress": "7795 10eme avenue",
      "City": "Montréal",
      "Province": "QC",
      "Country": "CA",
      "Postalcode": "H2A3B3",
      "Tel": "438 995 6475",
      "PreferredLanguage": "fr"
    },
    "Programm": {
      "IdProgramm": 9,
      "Designation": "OPTO",
      "CreationDate": "2020-01-01T00:00:00",
      "SuppressionDate": null,
      "RenewDate": "2021-01-04T00:00:00",
      "StartDate": null,
      "IsRenewDate": true
    }
}

在前台我使用下面的代码

public async Task<ActionResult> Authentificate(FormCollection form)
    {
        HttpClient client = autentificate();

        string userCodePwd = form["fCode"].ToString() + ":" + form["lPwd"].ToString();
        userCodePwd = Convert.ToBase64String(Encoding.Default.GetBytes(userCodePwd));

        //var decodedAuthenticationToken = Encoding.UTF8.GetString(Convert.FromBase64String(userCodePwd));
        
        HttpResponseMessage response = client.GetAsync("api/Login/FindPolice?userCodePasswordArray=" + userCodePwd).Result;

        try
        {
            if (response.IsSuccessStatusCode)
            {
                string Result = await response.Content.ReadAsStringAsync();

                JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                dynamic dobj = jsonSerializer.Deserialize<dynamic>(Result);

                int StatusCode = (int)response.StatusCode;
                if (StatusCode==200) //  Existe une assurance pour le client
                {
                    int StatusRequest = dobj["StatusRequest"];
                    if (StatusRequest==1001)
                    {
                        int IdProgram = dobj["IdProgram"];
                        RootAQII.Profil= JsonConvert.DeserializeObject<Profil>(dobj["Pr"].ToString());

                        RootAQII.Programm= JsonConvert.DeserializeObject<List<Programm>>(dobj["Programm"].ToString());
                        
                                                    if (IdProgram==9)
                        {
                            return RedirectToAction("Index", "OPTO");
                        }
                    }
                }
            }
            else
            {

            }
        }
        catch (Exception e)
        {
            String message = e.Message;
        }

        return View();
    }

问题是当我尝试解析 RootOPTOASSURED.Profil 的响应结果时

我收到此消息错误:

解析值时遇到意外字符:s。路径'',行 0,位置 0。

有人有任何想法提前谢谢你:)

【问题讨论】:

  • 我认为您的文本格式不正确。你可以设置一个断点并发布你得到的 json 和你发送的 json 吗?

标签: c# json webapi response.contenttype


【解决方案1】:

假设 Result 是上面的 json 字符串,则行

int IdProgram = dobj["IdProgram"];

应该失败,因为 dobj 的唯一元素应该是 dobj["PR"]

除此之外,您还尝试从单个 JSON 条目反序列化 Programm 条目列表。如果 Programm 应该是一个列表,那么它应该出现在 []

{
    "Pr": {
        "ClientProfil": {
            "IdClient": 67,
            "FirmName": null,
            "NumMember": "OPTOO111",
            "FirstName": "EL MONAGI",
            "LastName": "ABDELJALIL",
            "Email": "jalil_monagi@yahoofr",
            "Adress": "7795 10eme avenue",
            "City": "Montréal",
            "Province": "QC",
            "Country": "CA",
            "Postalcode": "H2A3B3",
            "Tel": "438 995 6475",
            "PreferredLanguage": "fr"
        },
        "Programm": 
        [
            {
                "IdProgramm": 9,
                "Designation": "OPTO",
                "CreationDate": "2020-01-01T00:00:00",
                "SuppressionDate": null,
                "RenewDate": "2021-01-04T00:00:00",
                "StartDate": null,
                "IsRenewDate": true
            }
        ]
    }
}

要么改行,要么改行

RootAQII.Programm= JsonConvert.DeserializeObject<List<Programm>>(dobj["Programm"].ToString());
                    

RootAQII.Programm= JsonConvert.DeserializeObject<Programm>(dobj["Programm"].ToString());
                    

我在rextester放了一个例子

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多