首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的JSON解析问题

C#中的JSON解析问题
EN

Stack Overflow用户
提问于 2017-09-14 05:08:46
回答 1查看 182关注 0票数 0

我使用下面的代码来解析JSON。我有例外了。

代码语言:javascript
复制
using System.Collections.Generic;
using Newtonsoft.Json;
using RestSharp;
using WebAutomation.BDD.Data;

namespace WebAutomation.Utils
{
    public class RestApi
    {
        private static IRestResponse HttpGetResponse(string endPoint)
        {
            var client = new RestClient(endPoint);
            var request = new RestRequest(Method.GET);
            return client.Execute(request);
        }

        public static FeaturedMenuItems GetFeaturedMenuItems()
        {
            var a = HttpGetResponse("http://<DOMAIN>/api/web/menu/quick");
            return JsonConvert.DeserializeObject<FeaturedMenuItems>(a.Content);
        }
    }
}

我使用下面的类来解析它:

代码语言:javascript
复制
using System.Collections.Generic;

namespace WebAutomation.BDD.Data
{
    public class FeaturedMenu
    {
        public string MenuItemName { get; set; }
        public string MenuItemName_en { get; set; }
        public string MenuItemName_zh { get; set; }
        public string url { get; set; }
        public string LastModifiedDate { get; set; }
    }

    public class FeaturedMenuItems
    {
        public List<FeaturedMenu> Featured_Menu { get; set; }
    }
}

这是我得到的JSON:

代码语言:javascript
复制
[
  {
    "Featured_Menu": [
      {
        "MenuItemName": "Today's Racing",
        "MenuItemName-en": "Today's Racing",
        "MenuItemName-zh": "今日赛事",
        "url": "/racing-betting/today",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Tomorrow's Racing",
        "MenuItemName-en": "Tomorrow's Racing",
        "MenuItemName-zh": "明日赛事",
        "url": "/racing-betting/tomorrow",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Upcoming Sports",
        "MenuItemName-en": "Upcoming Sports",
        "MenuItemName-zh": "近期赛事",
        "url": "/sports-betting/next-up",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Live Centre",
        "MenuItemName-en": "Live Centre",
        "MenuItemName-zh": "即场投注",
        "url": "/live-in-play-betting",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Multi Express",
        "MenuItemName-en": "Multi Express",
        "MenuItemName-zh": "Multi Express",
        "url": "/multi-express",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "AFL Finals",
        "MenuItemName-en": "AFL Finals",
        "MenuItemName-zh": "AFL Finals",
        "url": "/sports-betting/australian-rules/afl",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "NRL Finals",
        "MenuItemName-en": "NRL Finals",
        "MenuItemName-zh": "NRL Finals",
        "url": "/sports-betting/rugby-league/nrl/nrl-matches",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "MLB Matches",
        "MenuItemName-en": "MLB Matches",
        "MenuItemName-zh": "MLB Matches",
        "url": "/sports-betting/baseball/major-league-baseball/mlb-matches",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "NFL Matches",
        "MenuItemName-en": "NFL Matches",
        "MenuItemName-zh": "NFL Matches",
        "url": "/sports-betting/american-football/nfl/nfl-matches/",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "EPL Matches",
        "MenuItemName-en": "EPL Matches",
        "MenuItemName-zh": "EPL Matches",
        "url": "/sports-betting/soccer/united-kingdom/english-premier-league-matches",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "UEFA Europa League",
        "MenuItemName-en": "UEFA Europa League",
        "MenuItemName-zh": "UEFA Europa League",
        "url": "/sports-betting/soccer/uefa-competitions/europa-league-matches/",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Golovkin v Alvarez",
        "MenuItemName-en": "Golovkin v Alvarez",
        "MenuItemName-zh": "Golovkin v Alvarez",
        "url": "/sports-betting/boxing/bouts/fights/gennady-golovkin-v-saul-alvarez-20170917-600896-21745986",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Makybe Diva Stakes",
        "MenuItemName-en": "Makybe Diva Stakes",
        "MenuItemName-zh": "Makybe Diva Stakes",
        "url": "/racing-betting/horse-racing/flemington/20170916/race-7-704632-23756853",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "The Shorts",
        "MenuItemName-en": "The Shorts",
        "MenuItemName-zh": "The Shorts",
        "url": "/racing-betting/horse-racing/randwick/20170916/race-7-704601-23756572",
        "LastModifiedDate": "20170914111417"
      },
      {
        "MenuItemName": "Lotto",
        "MenuItemName-en": "Lotto",
        "MenuItemName-zh": "Lotto",
        "url": "/http://crownlotto.com.au",
        "LastModifiedDate": "20170914111417"
      }
    ]
  }
]

我得到以下例外:

Newtonsoft.Json.JsonSerializationException:‘不能将当前的JSON数组(例如,1,2,3)反序列化为'WebAutomation.BDD.Data.FeaturedMenuItems’类型,因为该类型需要一个JSON对象(例如,{“名称”:“值”})才能正确地反序列化。要修复此错误,要么将JSON更改为JSON对象(例如,{"name":"value"}),要么将反序列化类型更改为数组,或者将实现集合接口(例如ICollection、IList)的类型改为可以从JSON数组反序列化的列表。还可以将JsonArrayAttribute添加到该类型中,以强制它从JSON数组中反序列化。路径'',第1行,位置1‘

我想不出这个问题。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-09-14 05:12:09

您正在尝试反序列化一个FeaturedMenuItems数组,而不是一个FeaturedMenuItems。试着使用:

代码语言:javascript
复制
JsonConvert.DeserializeObject<FeaturedMenuItems[]>(a.Content)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46210947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档