Согласно этой документации GetOwnedGames
вернет JSON (как правильно предположил Джейсон) со следующей структурой
{
"game_count": <number of games>,
"games": [
{
"appid": "...",
"name": "...",
"playtime_2weeks": ,
"playtime_forever": ,
"img_icon_url": "",
"img_logo_url": "",
"has_community_visible_stats": ""
}, ...]
}
Вы не можете просто присвоить эту строку ItemsSource
и ожидать, что Xamarin.Forms выяснит для вас, вам придется позаботиться о том, как это десериализовано.
Вам нужно написать класс, который используется для десериализации вашей строки JSON. Refit выполнит десериализацию, но вам нужен класс для десериализации в любом случае:
public class GamesList
{
[JsonProperty("game_count")]
public int GameCount { get; set; }
[JsonProperty("games")]
public List<Game> Games { get; set; }
}
public class Game
{
[JsonProperty("appid")]
public string AppId { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("playtime_2weeks")]
public int PlayedMinutesInTheLastTwoWeeks { get; set; }
// And so on. Depending on what you need.
}
(См. Документацию JSON.Net в JsonProperty
)
Теперь вы можете переопределить ваш ISteamService
[Headers("Content-Type: application/json")]
public interface ISteamService
{
[Get("/IPlayerService/GetOwnedGames/v1/?key=XXXXC&include_appinfo=1&steamid=XXXX")]
Task<GamesList> GetGames();
}
и используйте его из вашего OnGetGamesCicked
как
var apiResponse = RestService.For<ISteamService>("https://api.steampowered.com");
var gamesList = await apiResponse.GetGames();
GamesList.ItemsSource = gamesList.Games;