亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法將多級 JSON 字符串轉換為對象列表。有什么建議么?

無法將多級 JSON 字符串轉換為對象列表。有什么建議么?

C#
千巷貓影 2022-11-21 15:56:19
大家好,這是我期待返回的 JSON 字符串{\"status\":\"success\",\"locations\":[{\"id\":\"24\",\"name\":\"Test New Location Test\",\"contact_first_name\":\"Test\",\"contact_last_name\":\"Test\",\"contact_email\":\"[email protected]\",\"contact_phone_number\":\"(555) 555-5555\",\"billing_address\":\"Test\",\"billing_city\":\"Test\",\"billing_state\":\"AK\",\"billing_zip\":\"55555\",\"traps\":[]}]}我正在嘗試將構成位置的所有不同部分存儲到對象列表中,例如 id、name、contact_first_name 等。我認為讓我感到困惑的是前面的狀態,這讓我變得有點困難訪問不同的位置。我正在按照本教程進行操作,它看起來很清楚,但還沒有讓它在我這邊工作。https://www.youtube.com/watch?v=XssLaKDRV4Y下面的代碼是我的服務類的一部分,它用于獲取預期的 http 響應(如上所述)和獲取成功消息。當我取消注釋下面的幾行代碼時,我的應用程序中斷并且不會將任何對象存儲到列表中。public async Task<string> GetLocationData()        {            var user_id = Convert.ToString(App.Current.Properties["user_id"]);            var session = Convert.ToString(App.Current.Properties["session"]);            var key = "randomkeystring";             var body = new List<KeyValuePair<string, string>>();            body.Add(new KeyValuePair<string, string>("user_id", user_id));            body.Add(new KeyValuePair<string, string>("session", session));            body.Add(new KeyValuePair<string, string>("key", key));然后我有一個 LocationCollection.cs,我希望在其中存儲不同的位置,這樣我以后可以遍歷它們并對它們做任何我需要做的事情。現在我能夠獲得預期的 JSON 字符串,{\"status\":\"success\",\"locations\":[{\"id\":\"24\",\"name\":\"Test New Location Test\",\"contact_first_name\":\"Test\",\"contact_last_name\":\"Test\",\"contact_email\":\"[email protected]\",\"contact_phone_number\":\"(555) 555-5555\",\"billing_address\":\"Test\",\"billing_city\":\"Test\",\"billing_state\":\"AK\",\"billing_zip\":\"55555\",\"traps\":[]}]}并且能夠檢查狀態是成功還是失敗。但是,我無法將“位置”的不同部分存儲到列表中。有什么建議么?
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您可以嘗試將 api 結果反序列化為結果模型,然后從那里再次反序列化為位置模型。例子:


我的 API 模型


  public class ApiResult

{

    public Int32 Status { get; set; }

    public string Message { get; set; }

    public string Data { get; set; }

}

在數據內部,我從 API 復制所有返回結果,然后反序列化為精確模型。這是示例:


 public static List<Models.OrderList> RetrieveOrderList(string host, List<Models.FilterCondition> filter)

    {

        string sResult = HttpHelper.httpPost(host + "api/Order/RetrieveOrderList", Newtonsoft.Json.JsonConvert.SerializeObject(filter));

        Models.ApiResult mResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.ApiResult>(sResult);

        if (mResult.Status == 0)

            throw new Exception(mResult.Message);

        return Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.OrderList>>(mResult.Data);

    }

如果你看到上面的 My return result(string),我反序列化為 API result Model,最后再次反序列化為 OrderList Model。希望這有助于解決您的問題。


更新:API 控制器 我忘了再提一點。在 API 控制器端您的結果需要復制到 API 模型。這是例子


[HttpPost]

    public Models.ApiResult RetrieveOrderList(List<Models.FilterCondition> conditions)

    {

        Models.ApiResult mResult = new Models.ApiResult();

        try

        {

            List<Models.OrderList>mOrderList= BLL.Order.RetrieveOrderList(conditions);

            mResult.Status = 1;

            mResult.Message = "Success";

            mResult.Data = Newtonsoft.Json.JsonConvert.SerializeObject(mOrderList);

            return mResult;

        }

        catch (Exception ex)

        {

            mResult.Status = 0;

            mResult.Message = ex.Message;

            mResult.Data = "";

            return mResult;

        }

    }


查看完整回答
反對 回復 2022-11-21
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

我的位置模型與 JSON 響應不匹配。一旦我讀到我的 catch 語句中的異常是什么,我就看到“陷阱”應該是另一個列表。在我將 traps 屬性更改為 List 然后為“陷阱”創建另一個類后,一切正常。



查看完整回答
反對 回復 2022-11-21
  • 2 回答
  • 0 關注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號