将JSON字符串存储在C#中,然后访问其中的各个部分
本文关键字:访问 个部 然后 字符串 JSON 存储 | 更新日期: 2023-09-27 18:26:14
我正在从API中提取一些JSON。它有以下格式:
{"yourname": {
"id": 42728521,
"name": "Your Name",
"profileIconId": 27,
"revisionDate": 1397930999000,
"summonerLevel": 1
}}
但是,它被存储为:
"{'"yourname'":{'"id'":42728521,'"name'":'"Your Name'",'"profileIconId'":27,'"summonerLevel'":1,'"revisionDate'":1397930999000}}"
在绳子里面。
我希望能够调用callerLevel并返回正确的值。
我一直在尝试这个:
using (var client = new WebClient())
{
api_return = client.DownloadString(api_call_key);
}
var foo = JsonConvert.DeserializeObject<Summoner>(api_return);
Console.WriteLine(Summoner.id);
Console.WriteLine(Summoner.name);
Console.WriteLine(Summoner.summonerLevel);
string id_ = foo.ToString();
Console.WriteLine(id_);
Console.ReadKey();
}
public class Summoner
{
public static int id { get; set; }
public static string name { get; set; }
public static int summonerLevel { get; set; }
}
然而,这只是打印出来:
0没有什么0
这里有两个问题,它们都阻止您从JSON中获取数据。
第一个问题是,正如Vikas所指出的,Summoner
类的属性不应该是static
。这样定义你的类:
public class Summoner
{
public int id { get; set; }
public string name { get; set; }
public int summonerLevel { get; set; }
}
第二个问题是您的JSON结构与您正在反序列化的内容不匹配。id
、name
和summonerLevel
属性不在JSON的根级别,它们位于另一个对象内部的下一级。因此,您需要将其反序列化为"包装"Summoner
的某个类。如果JSON中的yourname
属性是一个固定值,那么可以定义一个像这样的Wrapper类来反序列化为:
public class Wrapper
{
[JsonProperty("yourname")]
public Summoner Summoner { get; set; }
}
然而,由于JSON中的yourname
属性可能不是固定值(它可能会因不同的调用程序而更改),我建议反序列化为Dictionary<string, Summoner>
,如下所示:
var dict = JsonConvert.DeserializeObject<Dictionary<string, Summoner>>(json);
从那里,您可以循环遍历字典键值对,或者,如果您只期望一个,您可以使用First()
来获取它
var summoner = dict.First().Value;
这是一个完整的演示:
string json = @"{""yourname"": {
""id"": 42728521,
""name"": ""Your Name"",
""profileIconId"": 27,
""revisionDate"": 1397930999000,
""summonerLevel"": 1
}}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, Summoner>>(json);
var summoner = dict.First().Value;
Console.WriteLine(summoner.id);
Console.WriteLine(summoner.name);
Console.WriteLine(summoner.summonerLevel);
输出:
42728521
Your Name
1
Summoner
类中的属性不应为static
using (var client = new WebClient())
{
api_return = client.DownloadString(api_call_key);
}
var foo = JsonConvert.DeserializeObject<Summoner>(api_return);
Console.WriteLine(foo.id);
Console.WriteLine(foo.name);
Console.WriteLine(foo.summonerLevel);
..............
}
public class Summoner
{
public int id { get; set; }
public string name { get; set; }
public int summonerLevel { get; set; }
}