目前我正在使用 YouTube API 获取一些数据。数据在 json 中,我正在尝试获取其中的一部分。
我现在面临的问题是,我想使用下面的方法:
WebClient client = new WebClient();
string jsonData = client.DownloadString("https://www.googleapis.com/youtube/v3/videos?id=" + videoId + "&part=contentDetails&key=");
var results = JsonConvert.DeserializeObject(jsonData);
string duration = results["items"]["contentDetails"]["duration"];
目前这会导致错误:
Cannot apply indexing with [] to an expression of type 'object'
我现在面临的问题是我不知道如何正确反序列化对象,以便我可以使用文本索引来获取数据。我以前曾经这样做过,但我不记得了,也找不到关于我的方法的任何信息。
最佳答案
您应该做的是定义一个类,其中包含与您的 JSON 匹配的所有属性,然后将该类作为类型参数传递给反序列化:
Results results = JsonConvert.DeserializeObject<Results>(jsonData);
我没有关于您的 JSON 的更多信息,但快速定义如下所示:
public class Results
{
public Items items { get; set; }
}
public class Items
{
public ContentDetails contentDetails { get; set; }
}
public class ContentDetails
{
public string duration { get; set; }
}
如果您需要帮助将 JSON 响应转换为 C# 类,您可以使用转换器,例如 http://json2csharp.com/
您还可以反序列化为动态类型,如下所示:
var results = JsonConvert.DeserializeObject<dynamic>(jsonData);
然后,您只需访问您的属性:
string duration = results.items.contentDetails.duration;
但是,大多数时候不推荐使用dynamic
,因为它有效地消除了静态类型,因此您必须确保duration
将是一个字符串,否则当您尝试访问它时会抛出运行时异常。
关于c# - NewtonSoft Json 使用括号方法检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797273/