加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用json.NET和C#解析JSON数组

发布时间:2020-12-16 18:40:33 所属栏目:百科 来源:网络整理
导读:我有一些我需要解析的以下 JSON格式的数据: {"status":0,"timestamp":"8:20pm","routes":[ { "directions":[ "E Towne","ETP" ],"routeID":"30" },{ "directions":[ "Johnson","Observatory" ],"routeID":"81" }]} 使用json.net,我想得到以下输出: 30 E To
我有一些我需要解析的以下 JSON格式的数据:

{
"status":0,"timestamp":"8:20pm","routes":[
    {
        "directions":[
            "E Towne","ETP"
        ],"routeID":"30"
    },{
        "directions":[
            "Johnson","Observatory"
        ],"routeID":"81"
    }
]
}

使用json.net,我想得到以下输出:

30 E Towne – ETP

81 Johnson – Observatory

使用下面的代码,我得到以下不正确的输出:

30 E Towne – ETP

81 E Towne – ETP

如何将方向数组项写入相应的routeID项?我的代码:

public class Route
        {
            public string routeID { get; set; }
            public string directions { get; set; }  
        }

private void routeClient_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e) 
        {
            string jsonResults_routes = e.Result;
            JObject routeData = JObject.Parse(jsonResults_routes);

            JArray routeIdArray = (JArray)routeData["routes"];
            JArray routeDirections = (JArray)routeData["routes"][0]["directions"];

            List<Route> l = new List<Route>();

            for (int i = 0; i < routeIdArray.Count; i++)
            {
                Route BusRoutes = new Route();

                JObject routeIDarrayObject = (JObject)routeIdArray[i];
                BusRoutes.routeID = (string)routeIDarrayObject["routeID"];

                string sep = " - ";
                string bothDirections = String.Join(sep,routeDirections);

                List<string> sc = new List<string>();
                string[] direction = new string[]{bothDirections};
                sc.AddRange(direction);

                foreach (string direx in sc)
                {
                    BusRoutes.directions = direx; 
                }

                l.Add(BusRoutes);

            }
            var newList = l.OrderBy(x => x.routeID).ToList();
            lbRoutesData.ItemsSource = newList;
        }

解决方法

@competent_tech在分析中是正确的.如果我可以提出建议,我认为如果你使用实际物体会更自然.例如:

public class RouteInfo
{
    public List<string> Directions { get; set; }
    public string RouteID { get; set; }
}

public class RouteData
{
    public int Status { get; set; }
    public string Timestamp { get; set; }
    public List<RouteInfo> Routes { get; set; }
}

在你的方法中:

var routeData = JsonConvert.DeserializeObject<RouteData>(e.Result);
return routeData.Routes
                .Select(r => new Route
                    {
                        routeId = r.RouteID,directions = String.Join(" - ",r.Directions)
                    })
                .OrderBy(r =-> r.routeId)
                .ToList();

或者更自然地以其他方式操纵您的类型对象.

编辑:要获得基于JSON字符串生成类的简单方法,请转到json2csharp.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读