# 超级转换器 **Repository Path**: zijian666/converts ## Basic Information - **Project Name**: 超级转换器 - **Description**: 转换,从未如此简单! - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 33 - **Forks**: 11 - **Created**: 2020-09-14 - **Last Updated**: 2025-06-25 ## Categories & Tags **Categories**: utils **Tags**: dotNET, NetCore, Csharp ## README [![Fork me on Gitee](https://gitee.com/zijian666/super-convert/widgets/widget_3.svg)](https://gitee.com/zijian666/super-convert) # Converts 超级转换器 > `.NET Standard 2.0` 重新设计,同时支持`.NET4.5` # 更新日志 - [Converts](src/zijian666.Converts/UPLOGS.md) 主项目,提供各种类型转换的入口及注册 - [Converts.Json](src/zijian666.Converts.Json/UPLOGS.md) JSON支持,支持各种类型与json字符串之间的互转 `var json = user.To()` 或 `var user = """{"id":1,"name":"zijian666"}""".To()` - [Converts.Dynamic](src/zijian666.Converts.Dynamic/UPLOGS.md) 动态类型支持,例如键值对,匿名类或json字符串转dynamic, 转动态类型后属性不区分大小写 `var dy = new { id = 1, name = "zijian666" }.ToDynamic();// dy.ID == 1` - [Converts.Mapping](src/zijian666.Converts.Mapping/UPLOGS.md) 可注册任意类型属性映射 `ConvertsMapping.Map((m1, m2) => m2.Name = m1.NickName);` # 说明 > 对象转换,从未如此简单 ```csharp obj.To(); //转换失败,抛出异常 obj.To(T defaultValue); //转换失败,返回默认值 ``` ## 代码展示
示例代码,点击展开 ```csharp //最基本 "1".To(); "a".To(0); //转换失败返回 0 "是".To(); //支持 "是/否" "真/假" "对/错" "t/f" "true/false" 等 byte[].To(); "2018-02-20 16:50:02".To(); // 支持时间字符串转时间戳 1519116602L.To(); // 支持秒级时间戳转时间 1519116602000L.To(); // 支持毫秒级时间戳转时间(自动判断) //进阶 "1,2,3,4,5,6".To(); Dictionary.To(); //键值对转实体 DataRow.To(); //数据行转实体 DataTable.To>; //数据表转实体集合 //更复杂 DataTable.To>(); List>.To(); new { ID=1, Name="blqw"}.To(); //匿名类转换 //变态嵌套 Dictionary> .To>>(); //不能理解就算了 ```
## 扩展自定义转换器
示例代码,点击展开 ```csharp [TestMethod] public void 自定义转换器() { var i = 11; var my = i.To(); Assert.AreEqual(i, my.ID); } public class MyClass { public int ID { get; set; } } public class MyConvertor : AllowNullConvertor, IFrom { public ConvertResult From(IConvertContext context, int input) { return new MyClass() { ID = input }; } } ```
## 智能识别自定义转换方法
示例代码,点击展开 ```csharp [TestMethod] public void 自定义强转() { var i = 11; var my = i.To(); Assert.AreEqual(i, my.ID); } public class MyClass { public int ID { get; set; } public static explicit operator MyClass(int i) => new MyClass() { ID = i }; } ``` ```csharp [TestMethod] public void 自定义隐转() { var i = 11; var my = i.To(); Assert.AreEqual(i, my.ID); } public class MyClass2 { public int ID { get; set; } public static implicit operator MyClass2(int i) => new MyClass2() { ID = i }; } ```
## 其他功能
示例代码,点击展开 ```csharp //数字转大写 Console.WriteLine(Converts.ToChineseAmount("123456456.789")); //壹亿贰仟叁佰肆拾伍万陆仟肆佰伍拾陆元柒角捌分 Console.WriteLine(Converts.ToChineseNumber("123456456.789")); //一亿二千三百四十五万六千四百五十六点七八九 Console.WriteLine(Converts.ToChineseAmount("123456456.789", true)); //一亿二千三百四十五万六千四百五十六元七角八分 //全半角转换 Console.WriteLine(Converts.ToDBC(",1234567aks"));//,1234567aks Console.WriteLine(Converts.ToSBC("!1f23d.?@")); //!1f23d.?@ //摘要/加密 Console.WriteLine(Converts.ToMD5("123456")); //e10adc3949ba59abbe56e057f20f883e Console.WriteLine(Converts.ToSHA1("123456")); //7c4a8d09ca3762af61e59520943dc26494f8941b //随机加密 var arr = new[] { Converts.ToRandomMD5("123456"), Converts.ToRandomMD5("123456"), Converts.ToRandomMD5("123456"), Converts.ToRandomMD5("123456"), Converts.ToRandomMD5("123456"), }; foreach (var g in arr) { Console.WriteLine($"{g} : {Converts.EqualsRandomMD5("123456", g)}"); } /* fa91eefc-e903-dbcf-394b-0b757987357b : True 27abd3e0-fe0e-2eeb-1ff7-a60b03876465 : True 6d911bf2-0c59-0e01-5e87-7527dd1ee699 : True 0af7905a-0b3b-4eb4-b82b-0340f3438924 : True 1e024253-6bb9-fb25-4b67-3e42c265af02 : True */ ```
## JSON扩展 ```csharp "{\"id\":\"name\":\"blqw\"}".To(); ``` ## Dynamic扩展 ```csharp var a = new { id = 1, name = "zijian666" }; var b = a.ToDynamic(); Assert.IsTrue((int)b.ID == a.id); Assert.IsTrue((string)b.NaMe == a.name); ``` ## Mapping扩展 ```csharp private class MyClass1 { public string NickName { get; set; } } private class MyClass2 { public string Name { get; set; } } ConvertsMapping.Map((m1, m2) => m2.Name = m1.NickName); var my = new MyClass1 { Id = 1, NickName = "zijian666", }; var my2 = my.To(); Assert.IsNotNull(my2); Assert.AreEqual(my.NickName, my2.Name); ``` # 老项目已停止维护 > *老项目已经停止维护 [Convert3](http://gitee.com/blqw/blqw.Convert3)*