次のコードを使用してJSONを解析しています。私は例外を得ています。JSONのC#での解析の問題
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);
}
}
}
私はそれを解析するために以下のクラスを使用しています:
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です:
[
{
"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オブジェクト(たとえば、{"name": "value"})が必要なためです。 このエラーを修正するには、JSONオブジェクトをJSONオブジェクト(例: {"name": "value"})に変更するか、またはコレクションインタフェース(ICollection、IListなど)を実装する 型に逆シリアル化タイプを変更してください。 JSON配列から逆シリアル化できるリストのようなものです。 JsonArrayAttributeを型に追加して、 に強制的にJSON配列から逆シリアル化することもできます。パス '、1行目、1位。
私は問題を把握することができません。どんな助力も高く評価されます。
あなたは 'リストにデシリアライズする必要があります'で説明したように、[型にJSON配列(例えば[1,2,3])をデシリアライズすることはできません「」タイプがJSONオブジェクトを必要とするため( {"name": "value"})正しくデシリアライズする](https://stackoverflow.com/q/22557559/3744182)。 –
dbc