使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能使用 LINQ to JSON?)

2023-12-27

我知道有一些关于 Newtonsoft 的帖子,所以希望这不是重复...我正在尝试将 Kazaa 的 API 返回的 JSON 数据转换为某种不错的对象

WebClient client = new WebClient();
Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album");
StreamReader reader = new StreamReader(stream);

List<string> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(reader.Read().ToString());

foreach (string item in list)
{
    Console.WriteLine(item);
}

//Console.WriteLine(reader.ReadLine());
stream.Close();

JsonConvert 线只是我最近尝试的一条线...我不太明白,希望通过询问你们来消除一些步法。我最初试图将其转换为字典或其他东西......实际上,我只需要在其中获取几个值,因此根据文档判断,也许 Newtonsoft 的 LINQ to JSON 可能是更好的选择?想法/链接?

以下是 JSON 返回数据的示例:

{
  "page": 1,
  "total_pages": 8,
  "total_entries": 74,
  "q": "muse",
  "albums": [
    {
      "name": "Muse",
      "permalink": "Muse",
      "cover_image_url": "http://image.kazaa.com/images/69/01672812 1569/Yaron_Herman_Trio/Muse/Yaron_Herman_Trio-Muse_1.jpg",
      "id": 93098,
      "artist_name": "Yaron Herman Trio"
    },
    {
      "name": "Muse",
      "permalink": "Muse",
      "cover_image_url": "htt p://image.kazaa.com/images/54/888880301154/Candy_Lo/Muse/Candy_Lo-Muse_1.jpg",
      "i d": 102702,
      "artist_name": "\u76e7\u5de7\u97f3"
    },
    {
      "name": "Absolution",
      "permalink": " Absolution",
      "cover_image_url": "http://image.kazaa.com/images/65/093624873365/Mus e/Absolution/Muse-Absolution_1.jpg",
      "id": 48896,
      "artist_name": "Muse"
    },
    {
      "name": "Ab solution",
      "permalink": "Absolution-2",
      "cover_image_url": "http://image.kazaa.com/i mages/20/825646911820/Muse/Absolution/Muse-Absolution_1.jpg",
      "id": 118573,
      "artist _name": "Muse"
    },
    {
      "name": "Black Holes And Revelations",
      "permalink": "Black-Holes-An d-Revelations",
      "cover_image_url": "http://image.kazaa.com/images/66/093624428466/ Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1.jpg",
      "id": 48813,
      "artist_name": "Muse"
    },
    {
      "name": "Black Holes And Revelations",
      "permalink": "Bla ck-Holes-And-Revelations-2",
      "cover_image_url": "http://image.kazaa.com/images/86/ 825646911486/Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1 .jpg",
      "id": 118543,
      "artist_name": "Muse"
    },
    {
      "name": "Origin Of Symmetry",
      "permalink": "Origin-Of-Symmetry",
      "cover_image_url": "http://image.kazaa.com/images/29/825646 912629/Muse/Origin_Of_Symmetry/Muse-Origin_Of_Symmetry_1.jpg",
      "id": 120491,
      "artis t_name": "Muse"
    },
    {
      "name": "Showbiz",
      "permalink": "Showbiz",
      "cover_image_url": "http: //image.kazaa.com/images/68/825646182268/Muse/Showbiz/Muse-Showbiz_1.jpg",
      "id": 60444,
      "artist_name": "Muse"
    },
    {
      "name": "Showbiz",
      "permalink": "Showbiz-2",
      "cover_imag e_url": "http://image.kazaa.com/images/50/825646912650/Muse/Showbiz/Muse-Showbiz_ 1.jpg",
      "id": 118545,
      "artist_name": "Muse"
    },
    {
      "name": "The Resistance",
      "permalink": "T he-Resistance",
      "cover_image_url": "http://image.kazaa.com/images/36/825646864836/ Muse/The_Resistance/Muse-The_Resistance_1.jpg",
      "id": 121171,
      "artist_name": "Muse"
    }
  ],
  "per_page": 10
}

我做了更多阅读,发现 Newtonsoft 的 LINQ to JSON 正是我想要的...使用 WebClient、Stream、StreamReader 和 Newtonsoft...我可以点击 Kazaa 获取 JSON 数据、提取 URL、下载文件,然后执行此操作总共只有七行代码!我喜欢它。

WebClient client = new WebClient();
Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album");
StreamReader reader = new StreamReader(stream);

Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());

// Instead of WriteLine, 2 or 3 lines of code here using WebClient to download the file
Console.WriteLine((string)jObject["albums"][0]["cover_image_url"]);
stream.Close();

这篇文章获得了如此多的点击,我认为包含评论中讨论的“使用”部分可能会有所帮助。

using(var client = new WebClient())
using(var stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album"))
using (var reader = new StreamReader(stream))
{
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
    Console.WriteLine((string) jObject["albums"][0]["cover_image_url"]);
}

您可以使用 C#dynamic键入以使事情变得更容易。这种技术还使重构变得更简单,因为它不依赖魔术字符串。

JSON

下面的 JSON 字符串是来自 HTTP API 调用的简单响应,它定义了两个属性:Id and Name.

{"Id": 1, "Name": "biofractal"}

C#

Use JsonConvert.DeserializeObject<dynamic>()将此字符串反序列化为动态类型,然后只需以通常的方式访问其属性即可。

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
var id = results.Id;
var name= results.Name;

如果您指定的类型results变量为dynamic,而不是使用var关键字,那么属性值将正确反序列化,例如Id to an int而不是一个JValue(感谢 GFoley83 在下面的评论)。

Note:Newtonsoft 程序集的 NuGet 链接是http://nuget.org/packages/newtonsoft.json http://nuget.org/packages/newtonsoft.json.

Package:您还可以使用 nuget live installer 添加软件包,打开您的项目即可浏览包 https://i.stack.imgur.com/L6y8R.png然后安装它安装、卸载、更新 https://i.stack.imgur.com/1NILT.png,它只会添加到您的项目中的 Dependencies/NuGet 下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能使用 LINQ to JSON?) 的相关文章

随机推荐

  • NuGet-repositories.config

    NuGet新手问题 I saw repositories config被添加到 NuGet 包文件夹中 谁能指导我这个文件的用途是什么 谢谢你 该文件主要是 NuGet 实现细节 不应直接处理 它可能会消失或将来发生变化 但作为参考 它包含
  • 在 python 中更新字典

    我已经被这个问题困扰了很长一段时间 只是无法弄清楚 我只是想能够理解我缺少什么以及为什么需要它 我需要做的是创建一个函数 将每个给定的键 值对添加到字典中 参数 key value pairs 将是 key value 形式的元组列表 de
  • 为什么任务的 Result 属性对于非泛型任务 (C# 4.0+) 不可用?

    我正在尝试掌握 NET 4 0 任务并行库概念 在以下 C 4 0 代码片段中 Task t Task Factory StartNew gt Console WriteLine I am the task return res1 如果不能
  • 我的 Pyflink 设置有什么问题导致 Python UDF 抛出 py4j 异常?

    我正在使用文档中的 flink python datastream 教程 https ci apache org projects flink flink docs master docs dev python datastream tut
  • 如何使用 Cassandra 存储后端删除 Titan 中的图形?

    我使用 Titan 0 4 0 All 在 Ubuntu 12 04 上以共享 VM 模式运行 Rexster 如何正确删除 Titan 中使用 Cassandra 存储后端的图表 我已经尝试过TitanCleanup clear grap
  • 使用 ImageView 时出现内存不足错误

    我正在尝试使用 ImageView 制作壁纸设置应用程序 我知道很难显示一堆图像 特别是当图像为 1920x1080 时 我所做的是制作其他一堆具有较小分辨率 400x200 的图像 这些图像将显示在应用程序中 但是当用户尝试设置时将图像作
  • 如何获取 JSpinner 中所选项目的值?

    我正在制作一个使用最大数量为 30 的 JSpinner 的应用程序 我应该从这个 JSpinner 中选择一个值并将一个字符串粘贴到 JTextField 中 结果将出现在 Textarea 中 当我编译时 我有很多关于该方法的问题jSp
  • Android 和 OpenCV:考虑相机本质和反向投影的相机姿势单应性

    库 OpenCV 目标 Android OpenCV4Android 我尝试计算世界平面 例如监视器屏幕 的单应性以获取相机姿势 对其进行变换并将点重新投影回以进行跟踪任务 我使用 OpenCVs findHomography getPer
  • 带索引二维数组的逗号运算符

    我有这个算法 它是图论 dijkstra 算法的伪代码 首先进行的是基本的 for 循环 visitedSet 0 true visitedSet is a array of bools for int i 1 i lt numberNod
  • 防止 html 元素在分辨率太小时被挤压

    我看到像亚马逊和谷歌这样的网站 当你缩小网络浏览器的宽度时 元素只会挤压到某个点 然后即使你进一步缩小宽度 它也会停止挤压 什么样的技术可以实现这一点 是否有特定的 CSS 属性可以启用此功能 您可能正在看到min width and mi
  • 视图应该设置模型数据吗?

    我只是想弄清楚一个可能很简单的问题 视图应该直接设置模型数据还是只调用更改其自身数据的模型方法 就像软件开发中的其他事情一样 视情况而定 如果您在视图中使用表单输入 并且只需将这些输入中的数据获取到模型中 请直接设置数据 您可以通过多种方式
  • textView.getSelectionEnd() 返回 Samsung Marshmallow 6.0 设备上的起始索引值

    此问题是在以下位置观察到的搭载 Android 6 0 的三星设备仅有的 它在所有其他设备上运行良好 包括运行 Android 6 0 的非三星设备和运行 Android 5 1 及更低版本的三星设备 目前我们还没有任何搭载 Android
  • 调试 - 在 Xamarin.Forms Android 应用程序中引用 .NET 标准 1.4 库 (VS 2017)

    我用的是VS 2017 我有 Xamarin Forms Android 项目 我必须在那里引用一堆 NetStandard 1 4 库 我将所有项目都集中在一个解决方案中 我基本上添加了参考文献并编译了解决方案 没有任何问题 当我从 Ne
  • 从java获取HDFS的文件夹大小

    我必须确定 HDFS 文件夹的大小 其中包含来自 java 的子目录 从命令行我们可以使用 dus 选项 但是任何人都可以帮助我如何使用 java 获得相同的选项 The getSpaceConsumed 函数在ContentSummary
  • 找到登录的gmail用户的电子邮件地址

    我正在开发 chrome 扩展 该扩展仅专注于 Gmail 消息 该扩展名仅在 Gmail 消息中使用 但为此我需要找出登录用户的电子邮件地址 我已经创建了登录功能来使用弹出窗口中的扩展程序 并且我需要 登录用户电子邮件地址 来检查登录扩展
  • vs2010 c# 调试高亮颜色

    场景是我正在vs2010中调试一些C 代码 我停在断点处 我进入一个方法 当前行以黄色突出显示 我认为默认情况下 我在进入该方法之前留下的行现在具有浅灰色背景 如果你有深色文本还不错 但我有白色文本 根本读不懂 所以 我想改变它 但它叫什么
  • 是否可以将一个 ObservableField 绑定到另一个 ObservableField?

    我明白这样做的目的Android 的数据绑定库 https developer android com tools data binding guide html用于观察数据并在数据更改时自动更新的视图 问题 数据是否可以观察其他数据 例如
  • 如何在详细信息PreferenceFragment中加载相同的屏幕首选项

    我正在尝试做类似 Android 平板电脑中的设置首选项之类的事情 当我单击 更多 时 无线和网络 首选项屏幕将显示在右侧片段上 如果我触摸 VPN 则会在同一片段中打开 VPN 首选项屏幕 我怎样才能做到这一点 这是我的偏好 xml
  • 如何创建自定义 JVM? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在阅读第 6 10 条http www cafeaulait org javafaq html http www cafeaula
  • 使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能使用 LINQ to JSON?)

    我知道有一些关于 Newtonsoft 的帖子 所以希望这不是重复 我正在尝试将 Kazaa 的 API 返回的 JSON 数据转换为某种不错的对象 WebClient client new WebClient Stream stream