网站首页 > 博客文章 正文
C#技巧:匿名类如何形成数组与序列化?
说下我的实际使用场景,免得友友们以为这是“屠龙术”、啥也不是。
WebAPI接口开中,返回值一般是对业务结果对象进行验证、筛选、加工、变型、组合等操作之后再返回。这就形成很多只在接口返回值时使用的临时对象或对象数组,比如:
1、聚合多个业务结果,形成一个临时返回对象或临时对象数组;
2、对业务结果,附加一些汇总等属性;
3、业务结果对象属性太多,返回对象需要去除一些不需要的属性;
4、业务返回命名元组对象,接口返回json;命名元组序列化时,会丢失命名,变为:item1、itme2、itemx
这些场景就适合使用匿名类,或元组转匿名类。
特别的:
匿名类如何形成数组或list<匿名类>
1、纯数组(不能动态添加)
var anonymous = new { Name = "王高峰", Age = 11 };
var anonymous2 = new { Name = "王高峰2", Age = 22 };
var list1 = new[] { anonymous,anonymous2 };
2、初始化器(不能动态添加)
var list2 = new[]
{
new { FirstName = "张", LastName = "小菲" },
new { FirstName = "李", LastName = "大壮" }
};
3、动态增、减的列表:List<匿名类>
直接写 List<{string Name, int Age}> a = new () 是不行的,必须借助与 自动类型推断或者Linq
方式一:类型推断:集合初始化器,缺点是创建之后就有一项,当然可以用Where语句过滤掉初始项
var enumerable_1 = new[] { new { Name = "小王", Age = 22 } };
//过滤初始项:where 或者 Skip 方法
var enumerable_2 = new[] { new { Name = "小王", Age = 22 } }.Where(e => false);
var enumerable_2_2 = new[] { new { Name = "小王", Age = 22 } }.Skip(1);
方式二:使用 Select 方法,初始项可控制
var enumerable_3 = new int[0].Select(x => new { Id = 0, Name = "" });
var enumerable_3_2 = "王".Select(x => new { Id = 1, Name = x + "小明" });
方式三:使用 Range 方法,初始项可控制
var enumerable_4 = Enumerable.Range(0, 0).Select(e => new { ID = 1, Name = ""});
方式四:使用 Repeat 方法,初始项可控制
var enumerable_5 = Enumerable.Repeat(new { ID = 1, Name = "" }, 0);
//或者
var anonymous = new { Name = "王高峰", Age = 11 };
var enumerable_6 = Enumerable.Repeat(anonymous, 1);
元组(列表)转匿名类(列表):
//元组
List<(string Name, int Age)> tupleList = new List<(string Name, int Age)>()
{
new ("张三",12),
new ("王五",96),
};
//转为匿名类列表
var anonymousList = tupleList.Select(u => new {Nmae =u.Name, Age =u.Age});
//使用 Newtonsoft.Json 序列化json, 避免直接序列化元组出现 item1 item2的问题
var jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(anonymousList);
猜你喜欢
- 2024-10-15 Python 速度慢,试试这个方法提高 1000 倍
- 2024-10-15 C# 文件操作浅析(c#代码文件)
- 2024-10-15 从零开始自学C#基础的第十五天——数组的基本用法
- 2024-10-15 浅谈C#取消令牌CancellationTokenSource
- 2024-10-15 总结了才知道,原来channel有这么多用法
- 2024-10-15 面向对象(8-15)异常类-C#编程零基础到入门学习
- 2024-10-15 .NET 6 中 LINQ 的改进(.net 调优)
- 2024-10-15 Log4net配置文件 C#(c# log4j)
- 2024-10-15 C# BIN文件读取以及CRC校验(匹配STM32F103)
- 2024-10-15 C#如何对String中的Contact/Join方法进行优化的
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)