c# - 解析 JSON 而不声明模型类
问题描述
我有这样的 JSON:
{
"bookings": {
"group_id": "abc",
"name": "Study Rooms",
"url": "My URL",
"timeslots": [{
"room_id": "bcd",
"room_name": "101",
"booking_label": "Meeting1",
"booking_start": "2018-11-30T07:00:00-06:00",
"booking_end": "2018-11-30T07:30:00-06:00",
"booking_created": "2018-11-28T11:32:32-06:00"
}, {
"room_id": "cde",
"room_name": "102",
"booking_label": "Meeting2",
"booking_start": "2018-11-30T07:30:00-06:00",
"booking_end": "2018-11-30T08:00:00-06:00",
"booking_created": "2018-11-28T11:32:32-06:00"
}, //##AND many more like this##
]
}
}
如果我尝试像这样解析它:
var reservations = new { bookings = new { group_id = "", name = "", url="", timeslots = new List<Timeslot>() } };
Newtonsoft.Json.JsonConvert.PopulateObject(jsonResult, reservations);
只有时隙元素被填充
但是,如果我声明一个具有属性 groop_id、名称、url 和时隙集合的模型类,并像这样解析:
var reservations = new { bookings = new BookingsModel() };
Newtonsoft.Json.JsonConvert.PopulateObject(jsonResult, reservations);
它工作正常。
问题是为什么,是否可以在没有模型静态声明的情况下解析 JSON 的所有元素。
解决方案
您无法填充匿名对象的原因是,在 c# 中,匿名类型是不可变的。
相反,您可以使用JsonConvert.DeserializeAnonymousType()
它将从现有实例创建匿名类型的新实例:
var reservations = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(jsonResult,
new { bookings =
new { group_id = default(string), name = default(string), url=default(string),
timeslots = default(List<Timeslot>) } });
样品小提琴在这里。
推荐阅读
- java - redisson 无法使用 ssl 连接到哨兵,它将主服务器作为非 ssl
- php - 通过 php 从 MS Access 获取数据
- database - 为什么我的 influxDB 数据库增长如此之快?
- docker - Visual Studio 调试单个 docker 容器
- sql - 编写查询以输出按完成天数升序列出的开始日期和结束日期
- python - S形曲线检测
- node.js - 在数组中推送承诺,数组保持为空
- c++ - 为指向结构向量的指针分配内存
- javascript - 如何通过 React 优化在不同菜单项之间切换 className?
- .net - Windows Files-OnDemand 上下文菜单项