无法将多级 JSON 字符串转换为对象列表。有什么建议么?

大家好,这是我期待返回的 JSON 字符串{\"status\":\"success\",\"locations\":[{\"id\":\"24\",\"name\":\"Test New Location Test\",\"contact_first_name\":\"Test\",\"contact_last_name\":\"Test\",\"contact_email\":\"test@email.com\",\"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\":\"test@email.com\",\"contact_phone_number\":\"(555) 555-5555\",\"billing_address\":\"Test\",\"billing_city\":\"Test\",\"billing_state\":\"AK\",\"billing_zip\":\"55555\",\"traps\":[]}]}并且能够检查状态是成功还是失败。但是,我无法将“位置”的不同部分存储到列表中。有什么建议么?


千巷猫影
浏览 93回答 2
2回答

largeQ

您可以尝试将 api 结果反序列化为结果模型,然后从那里再次反序列化为位置模型。例子:我的 API 模型&nbsp; public class ApiResult{&nbsp; &nbsp; public Int32 Status { get; set; }&nbsp; &nbsp; public string Message { get; set; }&nbsp; &nbsp; public string Data { get; set; }}在数据内部,我从 API 复制所有返回结果,然后反序列化为精确模型。这是示例:&nbsp;public static List<Models.OrderList> RetrieveOrderList(string host, List<Models.FilterCondition> filter)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; string sResult = HttpHelper.httpPost(host + "api/Order/RetrieveOrderList", Newtonsoft.Json.JsonConvert.SerializeObject(filter));&nbsp; &nbsp; &nbsp; &nbsp; Models.ApiResult mResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.ApiResult>(sResult);&nbsp; &nbsp; &nbsp; &nbsp; if (mResult.Status == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Exception(mResult.Message);&nbsp; &nbsp; &nbsp; &nbsp; return Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.OrderList>>(mResult.Data);&nbsp; &nbsp; }如果你看到上面的 My return result(string),我反序列化为 API result Model,最后再次反序列化为 OrderList Model。希望这有助于解决您的问题。更新:API 控制器 我忘了再提一点。在 API 控制器端您的结果需要复制到 API 模型。这是例子[HttpPost]&nbsp; &nbsp; public Models.ApiResult RetrieveOrderList(List<Models.FilterCondition> conditions)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Models.ApiResult mResult = new Models.ApiResult();&nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<Models.OrderList>mOrderList= BLL.Order.RetrieveOrderList(conditions);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Status = 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Message = "Success";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Data = Newtonsoft.Json.JsonConvert.SerializeObject(mOrderList);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return mResult;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; catch (Exception ex)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Status = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Message = ex.Message;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mResult.Data = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return mResult;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }

一只斗牛犬

我的位置模型与 JSON 响应不匹配。一旦我读到我的 catch 语句中的异常是什么,我就看到“陷阱”应该是另一个列表。在我将 traps 属性更改为 List 然后为“陷阱”创建另一个类后,一切正常。
打开App,查看更多内容
随时随地看视频慕课网APP