探索 C# 常用第三方库与框架
在 C# 开发中,第三方库和框架极大地提高了开发效率和代码质量。通过这些库,开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库:Newtonsoft.Json、AutoMapper、NLog/Serilog 以及 Dapper,并讲解它们的功能和使用方式。
1. Newtonsoft.Json 库
Newtonsoft.Json 是 C# 中处理 JSON 的最流行库之一,它为 JSON 序列化、反序列化、以及复杂的 JSON 操作提供了简洁的 API。无论是处理简单的数据结构还是嵌套对象,Newtonsoft.Json 都能够快速高效地进行操作。
安装 Newtonsoft.Json
你可以通过 NuGet 安装这个库:
Install-Package Newtonsoft.Json
序列化与反序列化
- 序列化 是将 C# 对象转换为 JSON 格式的过程。
- 反序列化 是将 JSON 数据转换为 C# 对象的过程。
using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}var person = new Person { Name = "Alice", Age = 30 };// 序列化对象为 JSON 字符串
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json); // 输出:{"Name":"Alice","Age":30}// 反序列化 JSON 字符串为对象
var deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(deserializedPerson.Name); // 输出:Alice
处理复杂 JSON
Newtonsoft.Json 还支持处理复杂的 JSON 对象和嵌套结构。通过 JObject
,你可以动态解析 JSON 数据。
var json = @"{ 'Name': 'Alice', 'Details': { 'Age': 30, 'Country': 'USA' } }";
var jsonObject = JObject.Parse(json);
Console.WriteLine(jsonObject["Details"]["Country"]); // 输出:USA
2. AutoMapper
AutoMapper 是一个对象-对象映射器,简化了模型之间的转换过程。在开发中,通常需要将一个对象的属性映射到另一个对象,尤其是在处理 DTO(数据传输对象)和数据库实体时。AutoMapper 可以帮助你自动完成这些映射,减少手动编写代码的麻烦。
安装 AutoMapper
使用 NuGet 安装 AutoMapper:
Install-Package AutoMapper
设置与使用 AutoMapper
using AutoMapper;public class Source
{public string Name { get; set; }public int Age { get; set; }
}public class Destination
{public string FullName { get; set; }public int Age { get; set; }
}var config = new MapperConfiguration(cfg =>
{cfg.CreateMap<Source, Destination>().ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
});var mapper = config.CreateMapper();
var source = new Source { Name = "Alice", Age = 30 };
var destination = mapper.Map<Destination>(source);Console.WriteLine(destination.FullName); // 输出:Alice
Console.WriteLine(destination.Age); // 输出:30
在这个例子中,我们使用 CreateMap<Source, Destination>
定义了从 Source
到 Destination
的映射规则,并通过 Map
方法将源对象映射到目标对象。
3. NLog/Serilog 日志记录
日志记录是应用程序开发中非常重要的部分,它帮助开发者监控和调试应用程序。NLog 和 Serilog 是两个流行的 C# 日志记录库,它们提供了灵活的配置和强大的日志功能。你可以根据需求选择其中任意一个进行日志记录。
安装 NLog
使用 NuGet 安装 NLog:
Install-Package NLog
使用 NLog
using NLog;public class Program
{private static readonly Logger Logger = LogManager.GetCurrentClassLogger();public static void Main(string[] args){Logger.Info("Application started.");try{// 模拟应用程序逻辑throw new Exception("Something went wrong");}catch (Exception ex){Logger.Error(ex, "An error occurred");}}
}
通过 NLog 的配置文件 nlog.config
,你可以控制日志输出的格式、文件路径等。
安装 Serilog
使用 NuGet 安装 Serilog:
Install-Package Serilog
使用 Serilog
using Serilog;public class Program
{public static void Main(string[] args){Log.Logger = new LoggerConfiguration().WriteTo.Console().WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day).CreateLogger();Log.Information("Application started.");Log.CloseAndFlush();}
}
Serilog 支持结构化日志,允许记录详细的对象信息,提供更好的日志分析体验。
4. Dapper 微型 ORM
Dapper 是一个轻量级的微型 ORM,它提供了高效的数据库查询功能,并保留了 SQL 的灵活性。Dapper 是执行 SQL 查询和映射数据库结果集到 C# 对象之间的桥梁,适用于不需要复杂对象关系映射的应用场景。
安装 Dapper
通过 NuGet 安装 Dapper:
Install-Package Dapper
使用 Dapper
using System.Data.SqlClient;
using Dapper;public class Product
{public int ProductId { get; set; }public string ProductName { get; set; }public decimal Price { get; set; }
}var connectionString = "your_connection_string";
using (var connection = new SqlConnection(connectionString))
{var products = connection.Query<Product>("SELECT * FROM Products").ToList();foreach (var product in products){Console.WriteLine($"{product.ProductName}: {product.Price}");}
}
在这个示例中,我们通过 Dapper 的 Query
方法执行 SQL 查询,并将结果映射到 Product
对象。Dapper 提供了简洁的 API,适合需要直接编写 SQL 语句的开发者使用。
结论
C# 的第三方库和框架为开发者提供了丰富的工具,帮助简化开发过程并提升代码效率。通过使用 Newtonsoft.Json 来处理 JSON 数据,AutoMapper 来自动进行对象映射,NLog/Serilog 来进行日志记录,以及 Dapper 来快速访问数据库,开发者可以专注于业务逻辑,减少重复代码的编写。
- Newtonsoft.Json 是处理 JSON 数据的强大工具,简化了序列化与反序列化操作。
- AutoMapper 提供了自动对象映射的功能,减少了手动编写映射代码的麻烦。
- NLog/Serilog 提供了灵活的日志记录功能,帮助开发者监控和调试应用程序。
- Dapper 是高效的微型 ORM,适合需要直接控制 SQL 查询的场景。
通过掌握这些常用的第三方库和框架,开发者可以更加高效地构建可靠、可维护的 C# 应用程序。如果你有任何问题或者需要更多的示例,欢迎继续探讨!
这篇博客介绍了常用的 C# 第三方库和框架。如果你有任何疑问或需要更多详细示例,欢迎联系我!
相关文章:
探索 C# 常用第三方库与框架
在 C# 开发中,第三方库和框架极大地提高了开发效率和代码质量。通过这些库,开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库:Newtonsoft.Json、AutoMapper、NLog/Serilog …...
NodeJS GRPC简单的例子
1. 定义 .proto 文件 首先,创建一个 .proto 文件,定义服务和消息: syntax "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (Hel…...

无人机之三维航迹规划篇
一、基本原理 飞行环境建模:在三维航迹规划中,首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析,以获得可行的飞行路径。 飞行任务需求分析:根据无人机的任务需求,确定航迹规划的…...

风格迁移-StyTr 2 : Image Style Transfer with Transformers
风格迁移-StyTr 2 : Image Style Transfer with Transformers 论文链接:Image Style Transfer with Transformers 源码链接:StyTR-2 文章目录 风格迁移-StyTr 2 : Image Style Transfer with TransformersStyTR架构图图像内容编码器内容感知位置编码&…...
上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
待更新(持续更新),早关注,不迷路............................................................................... 目标检测系统操作说明【用户使用指南】(pythonpyside6界面系统源码可训练的数据集也完成的训练模型ÿ…...

记录搜罗到的Matlab 对散点进行椭圆拟合
需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长,搜罗到直接上代码 (1)有用的椭圆拟合及参数计算函数 function W fitellipse(x,y) % 构造矩阵 D [x.*x, x.*y, y.*y, x, y,ones(size(x))]; S D*D; G zeros(6); G(1,3) 2; G(3,1)…...

分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
最近,我尝试了一款名为《柬埔寨语翻译通》的应用程序,它旨在帮助用户进行中文和高棉语之间的翻译。以下是我使用这款应用的一些体验和感受。 双向翻译功能:我首先测试了它的翻译功能。《柬埔寨语翻译通》能够将中文翻译成高棉语,反…...

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广…...
redis在项目中运用(基础)
mysql学完命令之后,学过jdbc。 redis也要使用Java连接redis数据库 1.Jedis 2.RedisTemplate[重点] 1、Jedis【了解】 jedis是redis的java版本的客户端实现,jedis中提供了针对redis命令的操作 1.1导入jar文件 Maven方式 <dependency><group…...

libaom 源码分析系列:svc_encoder_rtc.cc 文件
源码函数关系 文件功能:实现 AV1 svc 编码的 RTC 功能 demo文件位置:libaom/examples/svc_encoder_rtc.cc文件内函数关系图: 结构体 AppInput:svc_encoder_rtc.cc 所属 demo 的结构体,作为从命令行接受参数的结构体;AvxVideoWriter:输出视频写入结构体;aom_codec_enc_c…...
MySQL备份和还原,用mysqldump、mysql和source命令来完成
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。 mysqldump命令使用方法 1运行 | cmd |利用 cd C:\Program Files\MySQL\MySQL Server 9.0\bin”命令进入bin文件夹 2输入命令 mysqldump -h127.0.0.1 -P3306 -uroot -pQWERTY zssjkcf>d:123.sql mysqldump -…...

MySQL Server、HeidiSQL(MySQL 数据库工具)
目录 一、MySQL Server (一)官网下载 (二)安装与配置 二、HeidiSQL软件 (一)安装 1. 官网下载 2. 打开 3. 使用 (1)打开服务 (2)新增数据库 ÿ…...
矩阵相关算法
矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像,请你将图像顺时针旋转 90 度。 #include <iostream> #include <vector>using namespace std;void rotate(vector<vector<int>>& matrix) {int n matrix.size();// 第一步…...
微信小程序-封装通用模块
文章目录 微信小程序-封装通用模块封装toast和modal封装storage封装网络请求 微信小程序-封装通用模块 封装toast和modal /** 提示消息框 */ function toast({title "数据加载中",icon "none",duration 2000,mask true, }) {wx.showToast({title,ico…...

Modnet 人像抠图(论文复现)
Modnet 人像抠图(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 Modnet 人像抠图(论文复现)论文概述论文方法复现WebUI部署 论文概述 人像抠图(Portrait matting)旨在预测一个精确的 alpha 抠图,可以用…...

利用session机制造测试账号,无需前端也可以测试后端接口
适用场景:我们在测试的时候经常会遇到前端还没有开发完毕,后端已经结束开发了,但是后端的有些接口是需要特定的账号身份调用才会生效,此时因为前端未开发完毕,所以我们不能通过web页面进行登录,那么如何解决…...
JAVA_18
JAVA_18 1.IO流2.JAVA_IO流3.标准输入输出4.对象序列化5.字符编码与字符集6.异常处理和资源关闭 1.IO流 IO流(Input/Output stream)是用于在程序和外部设备(如文件、网络等)之间进行数据传输的机制。它是Java中处理输入和输出操作的一种抽象方式。概念: 输入流(Input Stream):…...

Linux升级openssl版本
Linux升级openssl版本 服务器编译依赖库检查 $ yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 $ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 $ ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址:https://www.o…...

多态对象的存储方案小结
某个类型有几种不同的子类,Jackson中的JsonTypeInfo 和JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。用过一次这种方案后边就不想再用了。 …...
Linux 之 nano 编辑器
使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。 nano [选项] [[行,列] 文件名]... nano[必要参数][选择参数][文件] 命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...

DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...