- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
C#中System.Text.Json匿名对象反序列化
目录数据自定义类匿名方式动态方式参考以前就是一直使用Newtonsoft.Json用起来还是挺舒服的。由于JSON的应用越来越广,现在.NETCore都内置了System.Text.Json可以直接对JSON进行操作,不过两个东西的体验依然有点区别。
有时候我们会遇到的从第三方传递过来的jsonstring对象,对其进行解析并不需要所有的字段,只需要一个目标的字段时,可以考虑使用匿名对象/动态对象对其反序列化。
之前的Newtonsoft.Json好像直接使用dynamic,运用JObject进行处理,现在的不是那么容易。下文代码基于.NET6,为了代码整洁,实际配置了PropertyNameCaseInsensitive=true,但是下面代码中并没有体现。
数据
我们定义了如下的类型,并从OData获得了str字符串型数据。
publicreadonlystaticstringstr=
{@odata.context:http://localhost:9000/api/v1/$metadata#DataDto,value:[{id:0b734ed7-2955-4af4-a902-35dtimestamp:1684839865920},{id:7e285d08-cdb3-4209-8335-0ff9b20d39ef,timestamp:1684836312421}]}
;
publicclassDataDto
publicstringId{get;set;}
publiclongTimestamp{get;set;}
}
由于有元数据,我们无法直接将上面的字符串反序列化为DataDto的列表对象。
自定义类
最简单的方式,是对应此类对象,设计一个只用于反序列化的新类。
publicclassODataEnumerableResultWrapperT
whereT:class
publicIEnumerableTValue{get;set;}
varmeta=JsonSerializer.DeserializeODataEnumerableResultWrapperDataDto(str);
vartarget=meta.Value;
匿名方式
可以使用JsonNode来直接反序列化,并使用类似键值对的形式访问。
publicstaticvoidMain(){
JsonNodemeta=JsonSerializer.DeserializeJsonNode(str);
//如果直接是简单的对象,而不是数组,可以使用GetValueT这种形式。
varcount=meta[value].DeserializeIEnumerableDataDto().Count();
Console.WriteLine(count);
}
注意,这样的操作和你反序列化为JsonDocument/JsonElement并没有什么本质的区别。
动态方式
由于设计区别,直接使用dynamic进行反序列化,得到的对象并不具有一般dynamic的性质(实际上是System.Text.Json.JsonElement对象)。因此,我们无法通过的dynamic访问成员的形式进行操作。
dynamicmeta=JsonSerializer.Deserializedynamic(str);
Console.WriteLine(meta.GetType());
//OUTPUT:System.Text.Json.JsonElement
有文章说可以使用ExpandoOject实现,但是实际上无法对子级对象进行类似的访问,因为获取的子级对象,实际上是JsonElement。
dynamicmeta=JsonSerializer.DeserializeSystem.Dynamic.ExpandoObject(str);
Console.WriteLine(meta.GetType());
//System.Dynamic.ExpandoObject
Console.WriteLine(meta.value);
//[{id:0b734ed7-2955
您可能关注的文档
- 初级中学年度校本培训工作总结范文(28篇).docx
- 2025年医院放射科个人总结5篇.docx
- 技术竞聘演讲稿(9篇).docx
- 骨干教师培训个人学习计划(28篇).docx
- 居间的合同集合(3篇).docx
- 厂房土地转让买卖合同(21篇).docx
- 关于爱国主义教育的演讲稿(33篇).docx
- Android WindowManger实现桌面悬浮窗功能.docx
- 公司管理工作制度(14篇).docx
- 会长竞选演讲稿(33篇).docx
- QBQB401-2023冷轧钢板及钢带的尺寸外形重量及允许偏差.docx
- T_JYBZ 034—2024 中小学无人机教学实验室建设规范.docx
- TSG Z7001—2021特种设备检验机构核准规则.docx
- 部编版小学五年级下册道德与法治全册教学课件303张_可有哪些信誉好的足球投注网站.docx
- QBQB480-2023全工艺冷轧无取向电工钢带.docx
- 编制说明-《重大活动与突发警情事件临时执勤站点设置及装备配备指南》.docx
- 丙酸血症诊疗规范考试试卷试题及参考答案.docx
- 城市更新及黑臭河道治理工程总承包施工技术.docx
- RMW2-1600安装使用说明书.docx
- 碧桂园项目住宅一标段总承包工程技术标施工组织设计_可有哪些信誉好的足球投注网站.pdf
最近下载
- 塔吊附墙计算书.pdf VIP
- 制造业企业质量管理能力评估规范团体标准.pdf VIP
- 11BS6通风与空调工程.docx VIP
- 2025《党政机关厉行节约反对浪费条例》PPT课件.pptx VIP
- 河南省南阳地区2023-2024学年高二下学期期末考试物理试卷(含答案).pdf VIP
- 自然资源局公务员考试行政能力测试能力测试卷.docx VIP
- 《我国本土酒店品牌建设问题及对策》.doc VIP
- 在线网课学习课堂《学术交流英语(哈工 )》单元测试考核答案.docx VIP
- JGT396-2012 外墙用非承重纤维增强水泥板.docx VIP
- 人人商城恶意诉讼应诉指南-含胜诉答辩状和证据清单.docx VIP
文档评论(0)