• 我的订阅
  • 科技

C#如何反序列化派生类

类别:科技 发布时间:2022-12-19 02:02:00 来源:戴维斯骑士

假设有一个 Person 抽象基类,其中包含 Student 和 Teacher 派生类:

public class Person

{

public string Name { get; set; }

}

public class Student : Person

{

public int Score { get; set; }

}

public class Teacher : Person

{

public string Title { get; set; }

}

如果 API 输入类型是单个 Person 抽象基类,即使我们传入正确格式的派生类 JSON 字符串,System.Text.Json也只会使用基类进行反序列化:

[HttpPost]

[Route("get")]

public string Get(Person person)

{

return person.GetType().ToString();

}

C#如何反序列化派生类

我们必须主动告诉System.Text.Json如何处理反序列化派生类,因此需要自定义转换器。

思路

与序列化相反,我们需要实现自定义转换器的Read方法:

public class PersonConverter : JsonConverter

{

public override Person Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)

{

}

}

现在的关键是,如何判断到底要反序列化成哪个派生类型。

我们可以使用Read方法遍历 JSON 的所有 Property, 找到对应派生类型独有的属性,即可知道当前需要反序列化成哪个派生类型。

实现

为基类创建自定义转换器,实现Read方法:

public override Person Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)

{

Utf8JsonReader readerClone = reader;

while (readerClone.Read())

{

JsonTokenType tokenType = readerClone.TokenType;

switch (tokenType)

{

case JsonTokenType.PropertyName:

if (readerClone.ValueTextEquals("score"))

{

return (Person)JsonSerializer.Deserialize(ref reader,typeof(Student), options);

}

else if (readerClone.ValueTextEquals("title"))

{

return (Person)JsonSerializer.Deserialize(ref reader, typeof(Teacher), options);

}

break;

}

}

throw new NotImplementedException();

}

因为 Utf8JsonReader 是只进读取器,因此这里需要创建 Utf8JsonReader 实例的克隆readerClone去遍历 JSON,而原始 reader 用于反序列化派生类。

然后修改 Startup.cs 文件,注册自定义转换器:

services.AddControllers()

.AddJsonOptions(options =>

options.JsonSerializerOptions.Converters.Add(new PersonConverter()));

运行,反序列化成功:

C#如何反序列化派生类

结论

通过自定义转换器,我们实现了使用System.Text.Json反序列化派生类。返回搜狐,查看更多

责任编辑:

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2022-12-19 05:39:43

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

更多关于C#,序列的资讯:
微软发布c#开发套件:修复350多问题
...息,微软今年6月以预览版的形式,为VisualStudioCode发布了C#开发套件,在经过4个月的测试打磨之后,微软于今天正式发布该开发套件
2023-10-07 01:28:00
C# 发布 | 历史上的今天
...ladin: Sword and Fairy。资料来源:维基百科2000 年 7 月 7 日:C# 发布图源:维基百科2000 年 7 月 7 日
2023-07-08 04:00:00
微软免费Windows 11虚拟机 支持C#开发
...些工具包括:已启用USP、.NET桌面、Azure和Windows App SDK for C#等工作负载的Visual Studio 2022社区版
2023-06-28 07:00:00
C# 最有可能摘得“年度编程语言”,Python、Java 正在让位,TIOBE 12 月编程语言榜单最新预测来了!
...名第 50 位的编程语言2023 年 12 月排名第 50 位的编程语言C# 最有可能成为年度编程语言?当论及谁最有可能会成为 2023 年年度编程语言
2023-12-11 16:02:00
2023 年需求最大的 8 款编程语言出炉
....6万份工作机会,占比约为17%。▲图源 DevJobsScanner网站4、C# ▲图源C#的图标C#排名第四
2023-07-22 19:04:00
微软为vscode推出c#devkit改善开发体验
6月8日消息,微软今天面向VisualStudioCode发布了C#DevKit,在 Win10、Win11、macOS和Linux发行版上
2023-06-08 21:41:00
2022 年需求最大的 8 种编程语言
...许多顶级公司使用的Spring等框架正在帮助保持它的地位。C#第四名是 C# 。C# 是一种通用的、多范式的、面向对象的编程语言
2022-12-19 10:00
中铁建工汉峪金融商务中心B01地块综合楼二标段项目首栋封顶
...限公司承建的汉峪金融商务中心B01地块综合楼二标段项目C#楼主体结构顺利封顶,为工程如期建成投用奠定了基础。济南高新控股集团有限公司、营特国际工程咨询集团有限公司、中铁建工集
2023-05-29 11:34:00
微软招聘rust精兵强将加入新团队
...备大规模服务开发经验,并精通Microsoft365云服务的Rust和C#编程语言。招聘信息写道:“我们正在组建一支全新的团队
2024-01-30 04:14:00
更多关于科技的资讯:
比黄金涨的还猛!羽毛球价格上涨100% 网友纷纷提前囤货
快科技4月1日消息,近两年,众所周知,黄金价格真是一路狂飙。今日上午10点25分,黄金涨至3139.92美元的新纪录高位
2025-04-01 19:09:00
本文转自:人民网人民网北京4月1日电 (记者夏晓伦)当下,消费市场的竞争日益激烈,餐饮行业也在不断探寻新的发展路径与价值增长点
2025-04-01 19:16:00
全自研高性能RISC-V服务器芯片在前海首发
本文转自:人民网睿思芯科创始人、CEO谭章熹正式发布灵羽处理器。主办方供图人民网深圳4月1日电 (刘森君)3月31日,深圳前海企业睿思芯科举办2025春季新品发布会
2025-04-01 19:35:00
比亚迪腾势赵长江:Z9GT 120km/h追尾大货车 电池完好无损没有起火自燃
快科技4月1日消息,车辆碰撞后电池起火事件频发,再次引发大家对于新能源车安全的关注。今日,腾势销售事业部总经理赵长江微博发文称
2025-04-01 19:40:00
比亚迪腾势汽车3月销量达12620辆:平均成交价36.5万元
快科技4月1日消息,2025年4月1日,腾势汽车发布最新销量数据。3月,腾势汽车累计销量达12620辆,同比增长22.8%
2025-04-01 19:40:00
SU7爆燃致3人死亡:小米汽车遭遇最严峻的信任危机
经历了一整晚的微信聊天记录发酵之后,小米SU7在安徽高速上智驾发生车祸,导致三名花季少女丧生的命案,登上了热榜的头条。巨大的舆论风波背后
2025-04-01 19:40:00
女子冒风烧纸祈福引燃9辆车 官方通报:刑拘
快科技4月1日消息,清明将至,又到了祭祖祈福的时候,尤其需要提醒大家注意用火安全。据“北京朝阳消防”最新通报,3月30日
2025-04-01 19:40:00
10年来最大改版iOS 19六月登场!3款iPhone遭淘汰无缘升级
快科技4月1日消息,苹果将于6月10日举办WWDC开发者大会,届时将公开新一代iOS 19操作系统,有消息称这将是近十年来iOS系统最大幅度的改版
2025-04-01 19:40:00
连续53年吃35000个汉堡!美国72岁奇男子创纪录:非常健康
这绝对是一个不良的示范,但美国男子唐纳德·戈斯克(DonaldGorske)是个幸运儿!他是麦叔叔家巨无霸的“终极粉丝”
2025-04-01 19:40:00
天钡新款迷你机首发4099元:锐龙7 Pro 8845HS、6个3.5寸硬盘位
快科技4月1日消息,天钡WTR MAX“NAS型迷你主机”已经上市,首发4099元。新款迷你机采用全新模具,全金属一体化构造
2025-04-01 19:40:00
中国科大实现毫秒级可集成量子存储器
大皖新闻讯 大皖新闻记者从中国科学技术大学获悉,该校郭光灿院士团队的李传锋、周宗权研究组基于团队原创的无噪声光子回波方案
2025-04-01 19:49:00
夫妻自如租房5年:妻子多项指标异常
4月1日消息,据媒体报道,一对夫妻在杭州租住自如房屋5年,妻子体检发现多项指标异常,包括胸闷、过敏性咽炎、抵抗力降低、肺部结节
2025-04-01 20:10:00
十堰广电讯(全媒体记者 张陈堰 朱江 通讯员 纪宏新)3月底,世界规模最大原址保护的恐龙蛋化石遗址青龙山恐龙蛋化石群,首次成功尝试运用三维激光扫描技术
2025-04-01 20:24:00
携手十五载 共赢新未来:新克尔光电生产基地乔迁佛山
3月29日,广东新克尔光电科技有限公司(以下简称:新克尔光电)在佛山市三水区中南高科高端电子信息港举行生产基地乔迁仪式暨年度供应商大会
2025-04-01 20:26:00
海外媒体宣发:如何用全球声音塑造品牌影响力
一、案例启示:国际品牌的破圈密码在当今全球化的市场环境下,品牌影响力的提升已成为企业在激烈竞争中脱颖而出的关键因素。海外媒体发稿作为一种高效的品牌传播方式
2025-04-01 20:52:00