C# 如何读取大型JSON字符串的特定部分?

C# 如何读取大型JSON字符串的特定部分?,c#,json.net,C#,Json.net,我打电话给防暴游戏API 它以JSON格式返回(指向pastebin的链接) JSON包含6个“参与者”,我想从输出中创建6个参与者对象。我的问题是除了“参与者”之外还有其他部分,如“gameid”、“gamestarttime”等。因此,我不知道如何仅读出“参与者:”部分下的JSON文本 简而言之,如何仅从“参与者”下获取数据,或者如何仅从输出的“参与者”部分创建对象 以下是我的代码,如果除了参与者之外没有其他任何东西,它将起作用: // Create a string con

我打电话给防暴游戏API 它以JSON格式返回(指向pastebin的链接)

JSON包含6个“参与者”,我想从输出中创建6个参与者对象。我的问题是除了“参与者”之外还有其他部分,如“gameid”、“gamestarttime”等。因此,我不知道如何仅读出“参与者:”部分下的JSON文本

简而言之,如何仅从“参与者”下获取数据,或者如何仅从输出的“参与者”部分创建对象

以下是我的代码,如果除了参与者之外没有其他任何东西,它将起作用:

        // 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();