Я пытаюсь потреблять API, который возвращает JSON построен как:Играя с Type Поставщиком и JSON API
Team.player1/Player2/player3 ... (игроки построены в качестве свойств, а не в виде массива)
Я думал использовать рефлексию, чтобы сделать это, но с трудом получить игрока.
type Simple = JsonProvider<"sample.json">
let wbReq = "API-FOR-TEAM"
let docAsync = Simple.Load(wbReq)
let allValues = FSharpType.GetRecordFields (docAsync.Team.Players.GetType())
let test = allValues
|> Seq.map (fun p -> (p.GetValue(docAsync.Team.Players) as ?).Name) // HOW TO GET THE TYPED PLAYER HERE ?
|> fun p -> printfn p
EDIT: Я пытался использовать GetType и System.Convert.ChangeType
edit2: Вот упрощенная версия JSON:
{
"Team": {
"id": "8",
"players": {
"17878": {
"info": {
"idteam": 8,
"idplayer": 17878,
"note": 6
}
},
"18507": {
"info": {
"idteam": 8,
"idplayer": 18507,
"note": 5
}
}
}
}
}
Edit 3:
I нашел удобное решение на C# (благодаря JSON.net и динамическому), но для целей обучения я хотел бы сделать то же самое в F #, если кто-то захочет помочь:
private static List<Player> Parse(string jsonString)
{
dynamic jsonObject = JsonConvert.DeserializeObject(jsonString);
var players = ParseItems(jsonObject.Home.players);
return players;
}
private static List<Player> ParseItems(dynamic items)
{
List<Player> itemList = new List<Player>();
foreach (var item in items)
{
itemList.Add(new Player()
{
idplayer = item.Value.info.idplayer,
lastName = item.Value.info.lastname,
note = item.Value.info.note
});
}
return itemList;
}
Не уверен, что я понимаю, что вы хотите получить –
Возможно, вы можете показать пример json? –
уверенный @FoggyFinder дайте мне знать, если сейчас лучше, thx – rad