TournamentCode = SafeGet(jsonData, "tournamentCode");
работает, поскольку
"tournamentCode": "T8"
из строки JSON имеет тип string
.
Description = SafeGet(jsonData, "description");
, но не с
"description": { "name": { "en": "TORNEO8" }, "desc": { "en": "" } }
из строки JSON является вложенным типом (JsonData
), а не string
.Таким образом,
jsonData[key].ToString();
вернет строку JsonData object
.
Вы можете использовать этот другой ответ и реализовать все классы, представленные в JSON
или если это слишком излишне для вас, поскольку вам нужно только определенное поле Json, чем вы должны получить это конкретное поле:
Description = SafeGet(jsonData["description"]["desc"], "en");
или вам потребуется метод обертки, если выхотите, чтобы это также было "безопасно"
private JsonData SafeGetSubData(JsonData jsonData, string key)
{
try
{
return jsonData[key];
}
catch
{
return null;
}
}
, а затем используйте его, например,
var descriptionData = SafeGetSubData(jsonData, "description");
var desc = descriptionData != null ? SafeGetSubData(descriptionData, "desc") : null;
Description = SafeGet(desc, "en");
из-за блока try-catch
, это также работает, если desc
было null
.
Как и в моем комментарии, я не понял, почему вы используете несколько списков и циклов foreach, когда вы всегда получаете один и тот же контент ... вы бы лучше могли сделать все это в одном циклеи только с одним списком:
private readonly List<BC_PlayerInfo> playerInfoList = new List<BC_PlayerInfo>();
...
playerInfoList.Clear();
var tournamentConfigs = JsonMapper.ToObject(jsonResponse)["data"]["tournamentConfigs"];
foreach (JsonData tournamentConfig in tournamentConfigs)
{
var playerInfo = new BC_PlayerInfo(tournamentConfig);
playerInfoList.Add(playerInfo);
string _tournamentCode = playerInfo.TournamentCode;
Debug.Log(_tournamentCode);
TituloTorneo.text = _tournamentCode;
string _description = playerInfo.Description;
Debug.Log(_description);
DescripcionTorneo.text = _description;
}
и, вероятно, также для lblist
.