c# - NewtonSoft Json 使用括号方法检索数据

标签 c# json json.net

目前我正在使用 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/

相关文章:

c# - 反序列化 GUID 数组时出现 JSON.NET 异常

c# - Json.NET XML 转换和 TypeNameHandling.Arrays

c# - 如何使用 ExcelDataReader nuget 创建 Excel 文件和写入

c# - 使用 Linq MVVM 查询 ObservableCollection

c# - 从 Linq lambda 返回多个字段

php - 在 JSON 编码中使用深度的目的是什么?

php - 我希望 PHP 中的 json_encode 返回一个 JSON 数组,即使索引不按顺序

c# - 如何在 C#/Visual Studio 中包含源而不是库?

c# - 尝试在 xamarin 表单中使用 admob 时获取 'MediationRewardedVideoAdListenerImplementor is not abstract and does not override abstract method'

c# - Newtonsoft JSON.NET 和 json 键错误中的空格?