C# 如何读取大型JSON字符串的特定部分?
我打电话给防暴游戏API 它以JSON格式返回(指向pastebin的链接) JSON包含6个“参与者”,我想从输出中创建6个参与者对象。我的问题是除了“参与者”之外还有其他部分,如“gameid”、“gamestarttime”等。因此,我不知道如何仅读出“参与者:”部分下的JSON文本 简而言之,如何仅从“参与者”下获取数据,或者如何仅从输出的“参与者”部分创建对象 以下是我的代码,如果除了参与者之外没有其他任何东西,它将起作用:C# 如何读取大型JSON字符串的特定部分?,c#,json.net,C#,Json.net,我打电话给防暴游戏API 它以JSON格式返回(指向pastebin的链接) JSON包含6个“参与者”,我想从输出中创建6个参与者对象。我的问题是除了“参与者”之外还有其他部分,如“gameid”、“gamestarttime”等。因此,我不知道如何仅读出“参与者:”部分下的JSON文本 简而言之,如何仅从“参与者”下获取数据,或者如何仅从输出的“参与者”部分创建对象 以下是我的代码,如果除了参与者之外没有其他任何东西,它将起作用: // Create a string con
// Create a string containing the output from the API call
var jsonString = GetResponse("https://euw1.api.riotgames.com/lol/spectator/v3/active-games/by-summoner/79200188?api_key=xxxxxxxxxxxxxxxxxxxxxxxxxx");
// Create a list of Participants containing the data from the JSON
var participantsList = JsonConvert.DeserializeObject<List<Participant>>(jsonString);
// Show the names of the participants
foreach (var item in participantsList)
{
MessageBox.Show(item.summonerName);
}
根据我的评论,json.net只反序列化它可以在模型中找到的字段。因此,只需将希望从json获取的字段放在模型中即可 POCO示例:
public class GameData {
public string gameId {get; set;}
public int mapId {get; set;} //just demonstrating that it only fills in the fields you put in the model
public List<Participant> participants = new List<Participant>();
}
像这样反序列化:
var gameInfo = JsonConvert.DeserializeObject<GameData>(jsonString);
var participantsList = gameInfo.participants;
var gameInfo=JsonConvert.DeserializeObject(jsonString);
var participantsList=gameInfo.participants;
如果您在创建多个模型时没有问题,请创建一个基础模型
public class GameData
{
public string gameId {get; set;}
public int mapId {get; set;}
public List<Participant> participants
}
您也可以这样做来提取其他值创建一个具有
列表参与者的模型
,并将(JsonConvert.DeserializeObject
)反序列化到该模型中。json.net只填充它在模型中找到的字段,因此任何在模型中没有字段的json都将被忽略。我正在尝试这样做,但它给了我一个错误:Newtonsoft.json.JsonSerializationException:'无法将当前json对象(例如{“name”:“value”})反序列化为'System.Collections.Generic.List`1'类型[RiotApiCall1.Participant]”,因为该类型需要JSON数组(例如[1,2,3])要正确反序列化。错误表明这不是您要做的。它表示您仍在尝试反序列化到列表中。显示用于反序列化的代码。是的,显然该代码不起作用。我告诉过您,您必须反序列化到GameData
对象中,而不是列表中。请看我的帖子:“像这样反序列化”。哦,我刚刚理解了所有正在发生的事情。谢谢,我可以从这里继续!等我有时间尝试时,我会把它标记为正确的
var gameInfo = JsonConvert.DeserializeObject<GameData>(jsonString);
var participantsList = gameInfo.participants;
public class GameData
{
public string gameId {get; set;}
public int mapId {get; set;}
public List<Participant> participants
}
var gameData =JsonConvert.DeserializeObject<GameData>(jsonString);
var jsonString = GetResponse("https://euw1.api.riotgames.com/lol/spectator/v3/active-games/by-summoner/79200188?api_key=RGAPI-dc7c328a-dd2b-40ca-8ccd-71d05d530a4e");
JObject json = JObject.Parse(jsonString);
var gameId = json .GetValue("filetype").ToString();