探索 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)表示…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
