我有这些课程:
class Game
{
public List<Participant> Participants = new List<Participant>();
}
class Participant
{
public int ChampionId { get; set; }
public string SummonerName { get; set; }
public int SummonerId { get; set; }
}
public class APICalls
{
//private Game game;
private string GetResponse(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
public void GetParticipants()
{
// create a string from the JSON output
var jsonString = GetResponse("https://euw1.api.riotgames.com/lol/league/v3/positions/by-summoner/27528610?api_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// fill the Participants list from the Game class with participants based on the contents of the jsonString variable
Game.Participants = JsonConvert.DeserializeObject<Game>(jsonString);
}
}
我想使用APICalls类中的GetParticipants方法填充Game类中的Participants列表。我的问题是我无法从这个课程中访问该列表。
我想将所有API代码保存在一个类文件中,这就是我创建这个类的原因。
我做错了什么?
答案 0 :(得分:3)
您需要Game
类的实例才能使用它(非静态)字段:
var game = new Game();
game.Participants = JsonConvert.DeserializeObject<Game>(jsonString);
如果您只想要一个实例,则可以创建字段static
,那么您的代码就可以运行。但请注意,如果多个线程同时访问该列表,您可能会遇到问题。
答案 1 :(得分:2)
创建Game
的对象,并使用Participants
引用game.Participants
,如下所示:
Game game = new Game();
game.Participants = JsonConvert.DeserializeObject<Game>(jsonString);
或者
将参与者列表设为静态:
class Game
{
public static List<Participant> Participants = new List<Participant>();
}
然后使用Participants
Game.Participants
列表
答案 2 :(得分:1)
参与者不是静态财产。您需要声明该类的实例。您似乎也试图将JSON设想成一个游戏&#34;游戏&#34;对象,但随后将其分配给Participants属性。我假设实际上JSON正在返回参与者列表并相应地进行修改,但情况可能并非如此。
Game game = new Game();
game.Participants = JsonConvert.DeserializeObject<List<Participant>>(jsonString);