使用 Json.NET 反序列化包含数字键的 JSON

2023-12-14

我想将以下 JSON(使用 Json.NET)反序列化为一个对象,但不能,因为类名需要以数字开头。

这方面的一个例子是维基百科文章 API. 使用API提供 JSON 响应会返回类似这样的内容。请注意"16689396"在 - 的里面"pages" key.

{
   "batchcomplete":"",
   "continue":{
      "grncontinue":"0.893378504602|0.893378998188|35714269|0",
      "continue":"grncontinue||"
   },
   "query":{
      "pages":{
         "16689396":{
            "pageid":16689396,
            "ns":0,
            "title":"Jalan Juru",
            "extract":"<p><b>Jalan Juru</b> (Penang state road <i>P176</i>) is a major road in Penang, Malaysia.</p>\n\n<h2><span id=\"List_of_junctions\">List of junctions</span></h2>\n<p></p>\n<p><br></p>"
         }
      }
   }
}

我如何反序列化这个包含根据文章而变化的数字的 JSON?


听起来像是Pages您的财产Query类只需要是一个Dictionary<int, Page> or Dictionary<string, Page>.

使用您提供的 JSON 的完整示例 - 我不得不猜测一些名称含义:

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

public class Root
{
    [JsonProperty("batchcomplete")]
    public string BatchComplete { get; set; }
    [JsonProperty("continue")]
    public Continuation Continuation { get; set; }
    [JsonProperty("query")]
    public Query Query { get; set; }
}

public class Continuation
{
    [JsonProperty("grncontinue")]
    public string GrnContinue { get; set; }
    [JsonProperty("continue")]
    public string Continue { get; set; }
}

public class Query
{
    [JsonProperty("pages")]
    public Dictionary<int, Page> Pages { get; set; }
}

public class Page
{
    [JsonProperty("pageid")]
    public int Id { get; set; }
    [JsonProperty("ns")]
    public int Ns { get; set; }
    [JsonProperty("title")]
    public string Title { get; set; }
    [JsonProperty("extract")]
    public string Extract { get; set; }
}

class Test
{
    static void Main()
    {
        string text = File.ReadAllText("test.json");
        var root = JsonConvert.DeserializeObject<Root>(text);
        Console.WriteLine(root.Query.Pages[16689396].Title);
    }    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Json.NET 反序列化包含数字键的 JSON 的相关文章

随机推荐

  • Google Cloud Messaging 桥接标头导入失败

    我正在我的 Swift iOS 应用程序中实现 Google Cloud Messaging 我正在遵循这个指南 https developers google com cloud messaging ios client ver swif
  • has_and_belongs_to_many 与 has_many 通过

    两者有什么区别 has and belongs to many and has many through关系 何时何地使用哪一个 据我所知 has and belongs to many为您提供一个简单的查找表 其中引用了您的两个模型 例如
  • Django 1.2.4 开发服务器返回的代码 247 是什么?

    就此而言 错误代码集是否已记录 我上传大文件时收到代码 247 因此我认为这是内存问题 但找不到任何文档 您可能需要设置 FILE UPLOAD MAX MEMORY SIZE 这将强制将大于该大小的文件流式传输到磁盘 而不是允许连续消耗
  • Tweepy 多重身份验证处理程序

    我在用Tweepy 的 nirs 分叉版本 我需要用它来获取之间的推文2017 01 31 and 2017 02 01 我的代码可以工作 并且由于 Twitter 的速率限制 我必须在多个身份验证处理程序之间切换 以便能够处理日期与前面提
  • Flask-SQLAlchemy 验证:防止添加基于其他字段的关系

    我正在使用flask sqlalchemy 并尝试验证数据库的输入 对于单个字段 验证装饰器效果很好 但是 我在阻止将值添加到基于另一个字段的值的集合 关系中时遇到问题 例如 考虑以下数据模型 class MyRelation db Mod
  • Firebase 函数上显示“错误:在建立安全 TLS 连接之前客户端网络套接字已断开”

    我在用nodemailer使用我的 React js 项目的 Firebase 函数 服务器端函数 并收到错误 Error Client network socket disconnected before secure TLS conne
  • Laravel Firebase 手机号码 (OTP) 身份验证

    有没有将 Firebase 手机号码 otp 身份验证集成到 Laravel 的最佳方法 或任何包裹 您可以通过以下方式对用户进行身份验证firebase官方步骤让用户使用 OTP 验证手机号码 如果你想从服务器 Laravel 访问fir
  • System.nanoTime Javadoc 中引用的任意点是什么?

    我明白那个System nanoTime 与纪元无关 与System currentTimeMillis 尽管 从 Javadoc 中可以看出 返回的值是System nanoTime 是某个任意时间点 甚至可能是未来 的偏移量 对此 同一
  • 键盘方向和媒体查询错误(应用程序模式)

    将此网页添加到您的 iOS7 主屏幕 打开它 然后将焦点置于输入字段 弹出键盘 文字变成红色 因为手机认为它处于横向模式 有什么办法解决吗 或者我们应该责怪苹果 注意 此问题仅发生在应用程序模式下 而不是常规 Safari 浏览模式下 并且
  • 使用日期时间比较存储为字符串的日期

    我已将日期的日期存储为String在我的数据库中 格式如下 dateFormater new SimpleDateFormat dd MMM yyyy 现在我需要访问两个日期之间的数据startWeekDate and endWeekDat
  • SQL 查询 SELECT FROM [来自另一个表的列的值]

    我有一个表 X 当某些表发生更改时 触发器将在其中插入一行 我已将表名插入到表 X 中 现在 我想select表 X 中的数据inner join与实际的表格本身 是否可以使用 select 表的列中的值作为内连接的表 查询应该看起来像这样
  • 蟒蛇 | Numpy 数组图像转换

    我有一个具有形状的 Numpy 图像数组 1000 50 100 3 class numpy ndarray 其中包含 1000 个 RGB 图像 高度 50 宽度 100 通道 3 我想先转换RGB价值观YUV值并重新调整它们以获得yuv
  • 通过 Facebook SDK 3.1 支持 iOS 5 和 iOS 6

    我有一个应用程序当前支持使用旧版 Facebook SDK for iOS 通过提要对话框发布到 Facebook 更新到 iOS 版 Facebook SDK 3 1 后 我似乎可以 使用旧式 API Facebook h 实例化一个Fa
  • 使用数据从 Razor 页面重定向

    我需要通过重定向来传递集合 但 RedirectToPage 仅通过 GET 请求发送 是否有另一种方式 通过重定向发送数据 public class ListModel PageModel List
  • Android 向左滑动还是向右滑动?

    如何在 ListView 中检测到有人向左或向右滑动 You ll be wanting this excellent tutorial site died here s a new link http jsharkey org blog
  • 用于绘图的反向变换“scale()”

    我有一个以使用为中心的解释变量scale 用于预测响应变量 d lt data frame x runif 100 y rnorm 100 d lt within d s x lt scale x m1 lt lm y s x data d
  • 在 Python Django 中运行单元测试时如何禁用日志记录?

    我正在使用基于简单单元测试的测试运行器来测试我的 Django 应用程序 我的应用程序本身配置为在 settings py 中使用基本记录器 logging basicConfig level logging DEBUG 在我的应用程序代码
  • 熊猫字典到数据框 - 列乱序?

    我进行了搜索 但没有看到与这个特定问题相关的任何结果 我有一个 Python 字典 并将我的字典转换为 pandas 数据框 pandas DataFrame data dict 它可以工作 但只有一个问题 我的 pandas 数据框的列与
  • set @flag =1 和 set @@flag = 1 之间的区别

    你好 有什么区别 set flag 1 and set flag 1在 SQL Server 中 谢谢 没有什么 一些内置函数的名称以双 at 符号开头 作为一个惯例 为了避免混淆 通常建议您不要使用以 Source MSDN 使用标识符
  • 使用 Json.NET 反序列化包含数字键的 JSON

    我想将以下 JSON 使用 Json NET 反序列化为一个对象 但不能 因为类名需要以数字开头 这方面的一个例子是维基百科文章 API 使用API提供 JSON 响应会返回类似这样的内容 请注意 16689396 在 的里面 pages