c# - 如何从 JSON 文件反序列化 .NET Core 中封装的对象表?
问题描述
我想从外部 api 检索足球联赛的集合。来自服务器的响应如下所示:
{
"api": {
"results": 1496,
"leagues": [
{
"league_id": 1,
.....
返回的对象由一个包含“结果”和“联盟”的“api”字段组成。我想反序列化代码并将其映射到我的代码中的 League 类对象。
var jsonString = await ExecuteUrlAsync(filePath, url);
var results = JsonConvert.DeserializeObject<IEnumerable<LeagueEntity>>(jsonString);
jsonString 是正确的,但是当程序运行到第二行时,我得到一个异常:
Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.IEnumerable".
我需要进入 JSON 文件中的“联盟”字段,并忽略其余的响应。如何做到这一点?
解决方案
假设您LeagueEntity
对应于api.leagues[*]
对象,您可以使用它JsonConvert.DeserializeAnonymousType()
来挑选和反序列化 JSON 的有趣部分:
var leagues = JsonConvert.DeserializeAnonymousType(jsonString,
new { api = new { leagues = default(List<LeagueEntity>) } })
?.api?.leagues;
api.leagues
这避免了为容器对象创建显式数据模型的需要。它也应该比预加载到JToken
层次结构中更有效,然后作为第二步选择和反序列化api.leagues
数组。
演示小提琴在这里。
(或者,您可以使用How to auto-generate a C# class file from a JSON string中的答案之一为整个 JSON 自动生成完整的数据模型。)
推荐阅读
- c - C 非法指令:4 在分配给全局变量时
- c++ - Arduino 和 cmy 库之间的通信中出现“未定义的引用”错误
- reactjs - TS2532 - 对象可能未定义 - useRef 和 react-three-fiber
- python - 导入数学和 TypeError:“builtin_function_or_method”对象不可下标
- docker - Jenkins 在运行时将 NFS 共享安装在容器中的 docker 构建节点
- php - Webscraping Symfony/Panther:无法获取 HTML
- xcb - xcb_xfixes_get_cursor_image_and_name_reply 总是返回 null
- c - 使用 Emscripten 从 C 编译到 WebAssembly
- angular - Kendo Grid 在主行单击时展开/折叠详细信息
- meson-build - 无法使介子构建系统中的包装文件选项正常工作