当前位置: 首页 > 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)表示…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...