当前位置: 首页 > news >正文

探索 C# 常用第三方库与框架

在 C# 开发中,第三方库和框架极大地提高了开发效率和代码质量。通过这些库,开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库:Newtonsoft.JsonAutoMapperNLog/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# 开发中&#xff0c;第三方库和框架极大地提高了开发效率和代码质量。通过这些库&#xff0c;开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库&#xff1a;Newtonsoft.Json、AutoMapper、NLog/Serilog …...

NodeJS GRPC简单的例子

1. 定义 .proto 文件 首先&#xff0c;创建一个 .proto 文件&#xff0c;定义服务和消息&#xff1a; syntax "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (Hel…...

无人机之三维航迹规划篇

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

风格迁移-StyTr 2 : Image Style Transfer with Transformers

风格迁移-StyTr 2 : Image Style Transfer with Transformers 论文链接&#xff1a;Image Style Transfer with Transformers 源码链接&#xff1a;StyTR-2 文章目录 风格迁移-StyTr 2 : Image Style Transfer with TransformersStyTR架构图图像内容编码器内容感知位置编码&…...

上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

待更新(持续更新&#xff09;&#xff0c;早关注&#xff0c;不迷路............................................................................... 目标检测系统操作说明【用户使用指南】&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff…...

记录搜罗到的Matlab 对散点进行椭圆拟合

需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长&#xff0c;搜罗到直接上代码 &#xff08;1&#xff09;有用的椭圆拟合及参数计算函数 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的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!

最近&#xff0c;我尝试了一款名为《柬埔寨语翻译通》的应用程序&#xff0c;它旨在帮助用户进行中文和高棉语之间的翻译。以下是我使用这款应用的一些体验和感受。 双向翻译功能&#xff1a;我首先测试了它的翻译功能。《柬埔寨语翻译通》能够将中文翻译成高棉语&#xff0c;反…...

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程&#xff0c;涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架&#xff0c;我们提供了样例代码&#xff0c;以帮助读者更好地理解和实践。该系统具有广…...

redis在项目中运用(基础)

mysql学完命令之后&#xff0c;学过jdbc。 redis也要使用Java连接redis数据库 1.Jedis 2.RedisTemplate[重点] 1、Jedis【了解】 jedis是redis的java版本的客户端实现&#xff0c;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 &#xff08;一&#xff09;官网下载 &#xff08;二&#xff09;安装与配置 二、HeidiSQL软件 &#xff08;一&#xff09;安装 1. 官网下载 2. 打开 3. 使用 &#xff08;1&#xff09;打开服务 &#xff08;2&#xff09;新增数据库 ​&#xff…...

矩阵相关算法

矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像&#xff0c;请你将图像顺时针旋转 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 人像抠图&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 Modnet 人像抠图&#xff08;论文复现&#xff09;论文概述论文方法复现WebUI部署 论文概述 人像抠图(Portrait matting)旨在预测一个精确的 alpha 抠图&#xff0c;可以用…...

利用session机制造测试账号,无需前端也可以测试后端接口

适用场景&#xff1a;我们在测试的时候经常会遇到前端还没有开发完毕&#xff0c;后端已经结束开发了&#xff0c;但是后端的有些接口是需要特定的账号身份调用才会生效&#xff0c;此时因为前端未开发完毕&#xff0c;所以我们不能通过web页面进行登录&#xff0c;那么如何解决…...

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 地址&#xff1a;https://www.o…...

多态对象的存储方案小结

某个类型有几种不同的子类&#xff0c;Jackson中的JsonTypeInfo 和JsonSubTypes可以应对这种情形&#xff0c;但有点麻烦&#xff0c;并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。用过一次这种方案后边就不想再用了。 …...

Linux 之 nano 编辑器

使用git提交的时候&#xff0c;发生冲突或要记录相关信息时会弹出nano这个编辑器。 nano [选项] [[行,列] 文件名]... nano[必要参数][选择参数][文件] 命令行白的部分是组合键&#xff0c;后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键&#xff0c;(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 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Visual Studio Code 扩展

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

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

DAY 45 超大力王爱学Python

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