DotNetCommon-搜集.neter开发常用的功能

介绍

搜集.neter开发常用的功能,运行环境:.net4.7;.netstandard2.0;net5.0;

得益于在BC公司负责维护底层框架代码,自己的精力逐渐从 “全栈” 转移到专注于后端。

于是,以BC公司的公共类库为基础,搜集整理再加上自己的补充便有了现在的一个类库。

功能列表

  1. 通用数据模型;

  2. 树状结构&平铺数据的访问;

  3. 序列化;

  4. 注册表;

  5. 编码和加解密;

  6. 分布式id&分布式流水号;

  7. 校验框架;

  8. 压缩&解压缩;

  9. 验证码生成;

  10. 汉字转拼音;

  11. Dto和Entity转换之Mapper扩展;

  12. 递归篡改对象的属性值之Modify扩展;

  13. 将Dto属性投影到Entity之ModifyByDto扩展;

  14. 不同数据类型间的转换之To方法;

  15. 随机数;

  16. 对象池;

  17. 基于内存的并发消息队列;

  18. 反射工具;

  19. 主机诊断报告;

  20. 对象深度比对工具;

  21. 网络帮助类;

  22. 单位转换器(B/KB/MS/GB);

  23. 金额大小写转换;

  24. 枚举类型扩展方法;

  25. 常用扩展方法;

更多功能介绍

查看Wiki:https://gitee.com/jackletter/DotNetCommon/wikis/

快速开始

1.安装包

dotnet add package DotNetCommon --version 1.1.0

2. 引入命名空间

using DotNetCommon;
using DotNetCommon.Extensions;

3. 功能示例

3.1 数据模型

public Result<Person> GetUserNameById(int id)
{if (id < 0) return Result.NotOk("id必须大于0!");//...return Result.Ok(new Person());
}

3.2 加解密

public void EncryptTest()
{var sensitiveData = "敏感信息";var key = "12345678"; //加密var res = DESEncrypt.Encrypt(sensitiveData, key);//解密var res2= DESEncrypt.Decrypt(res, key);
}

3.3 分布式Id & 分布式流水号

public void Test()
{//首先设置当前机器id: 0-1023Machine.SetMachineId(1);//生成分布式id//输出示例: 185081270290616320long id = DistributeGenerator.NewId("key");//生成分布式流水号//输出示例: sno202105250001000001string sno = DistributeGenerator.NewSNO("sno", SerialFormat.CreateDistributeFast("sno", "yyyyMMdd", 6));
}

3.4 序列化

/// <summary>
/// 指定常用的设置,序列化为json字符串
/// </summary>
/// <param name="obj"></param>
/// <param name="dateFormatString">日期时间格式</param>
/// <param name="isLongToString">是否将long型转为字符串</param>
/// <param name="IgnoreNull">是否忽略null值的属性</param>
/// <param name="enum2String">是否将枚举转换为字符串</param>
/// <param name="lowerCamelCase">属性名称的首字母是否小写</param>
/// <param name="isIntend">是否格式缩进</param>
/// <param name="isAllToString">是否将所有数据类型转换为字符串</param>
/// <param name="allNumDigit">设定的所有数字的最大小数位数(默认为null,即: 不限制)</param>
/// <param name="decimalDigit">仅针对decimal设定的最大小数位数(默认为null,即: 不限制)</param>
/// <param name="otherSettings">其他的设置</param>
/// <returns></returns>
public static string ToJsonFast(this object obj, string dateFormatString = "yyyy-MM-dd HH:mm:ss", bool IgnoreNull = false, bool enum2String = true, bool lowerCamelCase = false, bool isIntend = false, bool isLongToString = false, bool isAllToString = false, int? allNumDigit = null, int? decimalDigit = null, Action<JsonSerializerSettings> otherSettings = null)

3.5 压缩&解压缩

//压缩单个文件
ZipHelper.ZipFile("c:\\tmp.zip","d:\\test.txt");
//压缩多个文件
ZipHelper.ZipFile("c:\\tmp.zip","d:\\test.txt","d:\\test2.txt");
//压缩单个目录
ZipHelper.ZipFolder("c:\\tmp.zip","d:\\test1");
//压缩多个目录
ZipHelper.ZipFolder("c:\\tmp.zip","d:\\test1","d:\\test2");//压缩多个文件,并为每个文件指定名称
ZipHelper.ZipFile("c:\\tmp.zip",("c:\\testfolder-中文B.txt", "重命名1.txt"),("c:\\testsubfolder-suba.txt", "\\sub\\重命名2.txt"))

3.6 类似AutoMapper的转换

public class Cat
{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }public DateTime Birth { get; set; }
}public class CatDto
{public int Id { get; set; }public string Name { get; set; }public int Age{get{return DateTime.Now.Year - Birth.Year;}}public DateTime Birth { get; set; }
}//转换示例
var cat = new Cat()
{Id = 1,Name = "小明",Birth = DateTime.Parse("1989-01-02"),Age = 20
};
var dto = cat.Mapper<CatDto>();
dto.ShouldNotBeNull();
dto.Id.ShouldBe(1);
dto.Name.ShouldBe("小明");
dto.Age.ShouldNotBe(20);

3.7 类FluentValidation校验组件

//Service层方法,添加实体
public Result<bool> AddStudent(Student student)
{var res = ValidateModelHelper.ValidResult(student, Student.ValidAdd);if (!res.Success) return res;//...新增操作return Result.Ok(true);
}public class Student
{public int Id { get; set; }public string Name { get; set; }public int? Age { get; set; }public DateTime? Birth { get; set; }public string IdCard { get; set; }public string Addr { get; set; }public string Phone { get; set; }public string Email { get; set; }/// <summary>/// 校验新增Student/// </summary>/// <param name="ctx"></param>public static void ValidAdd(ValidateContext<Student> ctx){//请求实体不能为null,否则直接中断校验ctx.MustNotNull().IfFailThenExit();//Id必须为0ctx.RuleFor(i => i.Id).MustEqualTo(0);//姓名不能为空且长度在1-4之间ctx.RuleFor(i => i.Name).MustNotNullOrEmptyOrWhiteSpace().MustLengthInRange(1, 4);//年龄要么为null,要么>=0ctx.RuleFor(i => i.Age).When(i => i != null, ctx => ctx.MustGreaterThanOrEuqalTo(0));//出生日期要么为null,要么>=1800-01-01ctx.RuleFor(i => i.Birth).When(i => i != null, ctx => ctx.MustGreaterThanOrEuqalTo(DateTime.Parse("1800-01-01")));//校验身份证号ctx.RuleFor(i => i.IdCard).MustIdCard();//如果手机号码不为null就校验格式ctx.RuleFor(i => i.Phone).When(i => i != null, ctx => ctx.MustCellPhone());//如果邮箱不为null就校验格式ctx.RuleFor(i => i.Email).When(i => i != null, ctx => ctx.MustEmailAddress());}
}

3.8 注册表

public void Test2()
{var path = @"HKEY_CURRENT_USER\TestApplication\Res";//判断是否存在RegistryHelper.Exists(path);//删除项RegistryHelper.DeletePath(path);//设置值RegistryHelper.SetString(path, "name", "小明");//读取值var name = RegistryHelper.GetString(path, "name");
}

更多介绍,参考Wiki:https://gitee.com/jackletter/DotNetCommon/wikis/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一笑 | 一个男人逐渐变心的过程

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

html 表格 左侧表头,左侧是表头的JS表格控件(自写,网上没有的)

今天&#xff0c;项目中要用到该表格&#xff0c;找了一遍&#xff0c;发现没有合适的&#xff0c;于是自己动手丰衣足食。最终呈现效果如上图&#xff0c;1、左侧是表头的表格数据展现&#xff0c;2、支持多行&#xff0c;多表头3、固定表头的功能4、能够支持标题5、获取表格中…

一个人的夜晚,让这些公众号来温暖你。

“外表的美只能取悦于人的眼睛&#xff0c;而内在的美却能感染人的灵魂”。阅读的内容决定了你的视野&#xff0c;转发的内容展现了你的底蕴。这些优质内容&#xff0c;你值得拥有&#xff0c;看下去你就知道。【关注方式&#xff1a;长按二维码&#xff0c;选择“识别图中二维…

grub参数介绍。

为什么80%的码农都做不了架构师&#xff1f;>>> grub的配置文件在/boot/grub/grub.conf。/etc/grub.conf和/boot/grub/menu.lst都是指向这个文件的软连接。 grub启动时&#xff0c;会寻找menu.lst文件&#xff0c;如果找不到&#xff0c;则进入grub>交互界面。…

又一次Task.Wait引起的教训

最近一用户在使用BeetleX.HttpClient组件并发访问延时比较高的https服务时引起了卡死现像。由于组件更多使用场景是内部服务和非https&#xff0c;一直没有这情况出现;但用户提供测试场景下这情况必现&#xff0c;所以翻查了一些相关代码。protected virtual void OnSslAuthent…

html盒模型向上浮动,HTML5盒模型、浮动和定位

在此之前我们先了解一下块级元素和行内元素的区别一、块级元素1、总是从新的一行开始2、高度、宽度都是可控的3、宽度没有设置时&#xff0c;默认为100%4、块级元素中可以包含块级元素和行内元素二、行内元素1、和其他元素都在一行2、高度、宽度以及内边距都是不可控的3、宽高就…

关于一个js栈溢出的异常

快一年没写web端的东西了&#xff0c;今天写了点东西。唉&#xff0c;快忘了&#xff0c;不过还好&#xff0c;基本的开发技能还是练出来了&#xff0c;这东西不能忘。 另外在这里贴点代码&#xff0c;预防以后会出现类似的情况。 javascript代码 //列表数据var appText new A…

科学中有故事,故事中有科学

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;孩子缺什么&#xff1f;不应该只是知识是独立思考意识、逻辑思维能力基于科学…

[译]WPF开源控件扩展库ControlzEx

原文链接&#xff1a;https://github.com/ControlzEx/ControlzEx翻译&#xff1a;沙漠尽头的狼&#xff08;谷歌及百度提供翻译支持&#xff09;Shared Controlz for WPF支持 .NET Framework&#xff08;4.5.2、4.6.2 及更高版本&#xff09;、.NET Core (3.1) 和 .NET 5&#…

html图片分开,webpack单独分离打包css,css里引用的图片路径错误,怎么解决?

现在我的这个项目是将css和js单独打包出来&#xff0c;打包后的目录结构和打包前一致。打包前&#xff1a;从这张图可以看到&#xff0c;如果是css文件夹根目录下的css文件引用images文件夹下的图片应该使用../就可以了&#xff0c;如果是css下某一个文件夹下面的css引用图片的…

每日一笑 | 程序员千万不能轻易去网吧!

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

.Net Core with 微服务 - Consul 注册中心

上一次我们介绍了 Ocelot 网关的基本用法。这次我们开始介绍服务注册发现组件 Consul 的简单使用方法。服务注册发现首先先让我们回顾下服务注册发现的概念。在实施微服务之后&#xff0c;我们的调用都变成了服务间的调用。服务间调用需要知道IP、端口等信息。再没有微服务之前…

指定特定的内容为首页

2019独角兽企业重金招聘Python工程师标准>>> 默认的情况下&#xff1a;drupal7是将新发表的文件都显示在首页中。 通过下面的方法&#xff0c;指定特定的内容为首页&#xff1a; 管理--》配置--》系统--》站点信息--》默认首页&#xff0c;将相应的内容地址写入&a…

Python到底是有什么魅力,让程序猿为它折腰?

在大数据时代&#xff0c;信息更新非常快速&#xff0c;计算机语言也犹如雨后春笋般被我们所熟知。C语言、C、Java等可谓是各领风骚、独占鳌头&#xff0c;而Python则是一门近几年崛起很快也很火的编程语言。虽说编程语言难分好坏&#xff0c;各有千秋。但Python到底有什么魔力…

上传html 0字节,HTML ajax 上传文件限制文件的类型和文件大小

htmljsfunction getFileType(filePath){//获取文件的后缀名var startIndex filePath.lastIndexOf(".");if(startIndex ! -1)return filePath.substring(startIndex1, filePath.length);else return "";}function uploadFile(obj, type) {var filePath $(…

jenkins代理设置

2019独角兽企业重金招聘Python工程师标准>>> 抱怨&#xff1a;对于像我这样苦逼的用户&#xff0c;机器在内网&#xff0c;干啥都要“偷偷”通过代理。 言归正传&#xff0c;jenkins\hudson默认并没有提供proxy设置&#xff0c;nexus仓库倒是提供里proxy设置。jenk…

.NET 6 Preview5+VS2022实战千万并发秒杀项目,帅爆了(附源码)

Microsoft 宣布了Visual Studio 2022 的第一个预览版&#xff0c;并且同时也发布了.NET 6 Preview 5。具有里程碑意义的Visual Studio 2022 Preview 1正式发布&#xff0c;重点是64位&#xff0c;而没有增加新功能&#xff0c;并且同时也发布了.NET 6 Preview 5。下面的内容来自…

你们要的印度布线,这是一种极端的牛X

全世界只有3.14 % 的人关注了数据与算法之美前天&#xff0c;数据汪分享了一篇文章「德国布线牛到不行&#xff1f;今天带你看看中国的&#xff01;」&#xff0c;一个中国的布线&#xff0c;小伙伴们表示非常过瘾&#xff0c;强迫症的最爱。不过数据汪也收到不少粉丝留言说&am…

jq动态获取input的值传给html,jquery 保证html()拿到的html字符串包含input的value值

发现html()返回的值&#xff0c;并不包含input的value的值&#xff0c; value得到的是空字符串。原因&#xff0c;DOM在这html渲染的时候value这个attribute仅仅是代表input的初始值。后面&#xff0c;如果需要拿到新的html带最新value的需要用js手动的设置attribute value为新…

MIPS衰落 LoongArch崛起

不久前&#xff0c;龙芯发布了自主指令集LoongArch和基于LoongArch设计的3A5000&#xff0c;与MIPS彻底分道扬镳。从龙芯最初基于MIPS添加指令&#xff0c;到发展出基于MIPS的LoongISA&#xff0c;再到最新的LoongArch&#xff0c;龙芯的目的是非常明确的&#xff0c;也是显而易…