Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用JSON.Net解析JSON数值属性_C#_Json_Parsing_Json.net - Fatal编程技术网

C#使用JSON.Net解析JSON数值属性

C#使用JSON.Net解析JSON数值属性,c#,json,parsing,json.net,C#,Json,Parsing,Json.net,我正在尝试解析以下结构中返回给我的JSON,但我无法获得正确的类结构,以便正确解析: {"44542152": [{ "queue": "RANKED_SOLO_5x5", "name": "Elise's Elite", "entries": [{ "leaguePoints": 0, "isFreshBlood": false, "isHotStreak": false, "division": "IV", "is

我正在尝试解析以下结构中返回给我的JSON,但我无法获得正确的类结构,以便正确解析:

{"44542152": [{
   "queue": "RANKED_SOLO_5x5",
   "name": "Elise's Elite",
   "entries": [{
      "leaguePoints": 0,
      "isFreshBlood": false,
      "isHotStreak": false,
      "division": "IV",
      "isInactive": false,
      "isVeteran": false,
      "playerOrTeamName": "Autdsm",
      "playerOrTeamId": "44543152",
      "wins": 11
   }],
   "tier": "SILVER"
}]}
然而,由于JSON的“44542152”:根根据我请求的用户的不同而变化,我发现很难将其解析为对象

这就是我到目前为止所做的:

public static AreTheyChallenger.Core.RankInfo getLeague(string region, Summoner summoner)
    {
        try
        {
            using (var webClient = new WebClient())
            {
                var json = webClient.DownloadString("https://" + region + ".api.pvp.net/api/lol/" + region + "/v2.5/league/by-summoner/" + summoner.id + "/entry" + "?api_key=" + Keys.api_key);
                var summonerRankInfo = JObject.Parse(json).Values().First().ToObject<RankInfo>();
                return summonerRankInfo;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
        return null;
    }
公共静态AreTheyChallenger.Core.RankInfo getLeague(字符串区域,召唤师)
{
尝试
{
使用(var webClient=new webClient())
{
var json=webClient.DownloadString(“https://“+region+”.api.pvp.net/api/lol/“+region+”/v2.5/league/by caller/“+caller.id+”/entry“+”?api_key=“+Keys.api_key”);
var callowerrankinfo=JObject.Parse(json).Values().First().ToObject();
返回Kinfo;
}
}
捕获(例外e)
{
控制台写入线(e);
}
返回null;
}
这就是我试图将其解析为的类:

public class RankInfo
{

    public class Entry
    {
        public int leaguePoints { get; set; }
        public bool isFreshBlood { get; set; }
        public bool isHotStreak { get; set; }
        public string division { get; set; }
        public bool isInactive { get; set; }
        public bool isVeteran { get; set; }
        public string playerOrTeamName { get; set; }
        public string playerOrTeamId { get; set; }
        public int wins { get; set; }
    }

    public class RootObject
    {
        public string queue { get; set; }
        public string name { get; set; }
        public List<Entry> entries { get; set; }
        public string tier { get; set; }
    }

}
公共类RankInfo
{
公开课入学
{
公共整数联盟点{get;set;}
公共bool isFreshBlood{get;set;}
公共bool isHotStreak{get;set;}
公共字符串除法{get;set;}
公共布尔值是活动的{get;set;}
公共布尔值{get;set;}
公共字符串playerOrTeamName{get;set;}
公共字符串播放器{get;set;}
public int wins{get;set;}
}
公共类根对象
{
公共字符串队列{get;set;}
公共字符串名称{get;set;}
公共列表项{get;set;}
公共字符串层{get;set;}
}
}
我对此很陌生,如果问题很明显,我很抱歉,但我的目的是能够访问一些存储的属性并将它们呈现给用户


提前感谢。

您的
RankInfo
类没有成员,只有类定义。也许您想让它保存一个
根对象的实例

通过将JSON反序列化行稍微修改为以下内容,可以获得
RootObject
的实例:

var summonerRankInfo = JObject.Parse(json).Values().First().First.ToObject<RankInfo.RootObject>();
你很接近


这应该是演员阵容中的RootObject[]。再看看你的JSON。。。如果你把它缩进适当的话会更有帮助。它将一个字符串映射到一个对象数组,而不是单个对象,这些对象是您的根对象,而不是RankInfo。

您可能需要更改嵌套类,如下所示。请让我知道这是否是我的意图

void Main()
{
    string jsonString = "{'44542152': [{ 'queue': 'RANKED_SOLO_5x5', 'name': 'Elises Elite', 'entries': [{ 'leaguePoints': 0, 'isFreshBlood': false, 'isHotStreak': false, 'division': 'IV', 'isInactive': false, 'isVeteran': false, 'playerOrTeamName': 'Autism', 'playerOrTeamId': '44543152', 'wins': 11 }], 'tier': 'SILVER' }]}".Replace('\'','"');

    JObject jsonObject = JObject.Parse(jsonString);
    JArray jsonArray = jsonObject.Values().First() as JArray;
    var summonerRankInfo = jsonArray.First().ToObject<RootObject>();
}

public class Entry
{
    public int leaguePoints { get; set; }
    public bool isFreshBlood { get; set; }
    public bool isHotStreak { get; set; }
    public string division { get; set; }
    public bool isInactive { get; set; }
    public bool isVeteran { get; set; }
    public string playerOrTeamName { get; set; }
    public string playerOrTeamId { get; set; }
    public int wins { get; set; }
}

public class RootObject
{
    public string queue { get; set; }
    public string name { get; set; }
    public List<Entry> entries { get; set; }
    public string tier { get; set; }
}
void Main()
{
string jsonString=“{'44542152':[{'queue':'Raked_SOLO_5x5','name':'Elises Elite','entries':[{'leaguePoints':0','isFreshBlood':false','Ishotstrike':false','division':'IV','IsNactive':false','IsVenter':false','PlayerTorTeamid':'44543152','wins':11}','tier':'SILVER'}替换(''''''''''''''''''''''''';
JObject-jsonObject=JObject.Parse(jsonString);
JArray jsonArray=jsonObject.Values().First()作为JArray;
var=jsonArray.First().ToObject();
}
公开课入学
{
公共整数联盟点{get;set;}
公共bool isFreshBlood{get;set;}
公共bool isHotStreak{get;set;}
公共字符串除法{get;set;}
公共布尔值是活动的{get;set;}
公共布尔值{get;set;}
公共字符串playerOrTeamName{get;set;}
公共字符串播放器{get;set;}
public int wins{get;set;}
}
公共类根对象
{
公共字符串队列{get;set;}
公共字符串名称{get;set;}
公共列表项{get;set;}
公共字符串层{get;set;}
}
我就是这么做的:

var data = JsonConvert.DeserializeObject<Dictionary<string,IList<RankInfo.RootObject>>>( json );
var rankinfo = data["44542152"].First();
var data=JsonConvert.DeserializeObject(json);
var rankinfo=data[“44542152”].First();

尝试使用此工具生成类:非常方便(IMO:)问题很明显,但解决方案肯定不是。好问题:)如果您不想下载任何内容,也可以使用json2csharp。感谢您的评论:)我一直在使用类似的工具,但结果证明它没有考虑数组,我和其他人也没有是问题。非常感谢,这与上面的答案相结合解决了我的问题。这是问题之一,另一个是我需要考虑json中的数组。请查看jsonArray变量。它保存帐户的每条记录。哦,很抱歉,我忽略了这一点,很好的回答,我用它改进了我的代码-谢谢。
var data = JsonConvert.DeserializeObject<Dictionary<string,IList<RankInfo.RootObject>>>( json );
var rankinfo = data["44542152"].First();