【问题标题】:Using JSON.NET to populate a list of sports events [closed]使用 JSON.NET 填充体育赛事列表 [关闭]
【发布时间】:2014-08-08 15:21:37
【问题描述】:
这里是新手。
我有一个 C# Windows Presentation Forms 程序,我正在尝试添加一个方法来下载 JSON 网页的字符串,然后从页面中的数据。唯一的问题是 JSON.NET 文档让我感到困惑,我似乎无法掌握一般的 JSON 格式。
作为参考,这个方法有两个部分:
1) 获取“官方”事件列表(如果您仔细观察,您会注意到每个事件项中都有一个“官方”布尔值)并创建一个包含每个事件“键”的字符串列表(每个事件项中的第一个值)
2)为每个活动“key”,列出参加每个活动的团队,并按每个团队的“team_number”对每个团队进行排序
Here is a test page for the event list.Here is the test page for the team list from one event.
我对 JSON.NET 库/文档的最大问题是我似乎无法弄清楚如何获取每个项目并从中隔离一个特定值。例如,每个事件项中有一大堆值,但我只需要“官方”值和“关键”值。与团队相同,我只需要每个项目的“team_number”值。
你们能帮我多了解一下图书馆吗,或者如果这不适合这份工作,甚至可以给我指出正确的图书馆吗?
【问题讨论】:
标签:
arrays
json
list
documentation
json.net
【解决方案1】:
首先要做的是使用json2csharp 生成代表您的 JSON 的类。
public class Event
{
public string key { get; set; }
public string website { get; set; }
public bool official { get; set; }
public string end_date { get; set; }
public string name { get; set; }
public string short_name { get; set; }
public string facebook_eid { get; set; }
public string event_district_string { get; set; }
public string venue_address { get; set; }
public int? event_district { get; set; }
public string location { get; set; }
public string event_code { get; set; }
public int year { get; set; }
public List<object> webcast { get; set; }
public List<object> alliances { get; set; }
public string event_type_string { get; set; }
public string start_date { get; set; }
public int event_type { get; set; }
}
public class Team
{
public string website { get; set; }
public string name { get; set; }
public string locality { get; set; }
public int rookie_year { get; set; }
public string region { get; set; }
public int team_number { get; set; }
public string location { get; set; }
public string key { get; set; }
public string country_name { get; set; }
public string nickname { get; set; }
}
现在您可以将 JSON 反序列化为这些对象的列表,并使用 LINQ 从列表中查询您需要的内容。我是凭记忆做的,所以它可能需要一些调整才能工作。
var events = JsonConvert.Deserialize<IEnumerable<Event>>( eventJson );
var officialEvents = events.Where( e => e.official )
.Select( e => new { e.key, e.official } );