好嘞 🚀 我来为你整理 精选 4 款基于 C# 的开源工具类库,它们都能在日常开发中大幅提升效率,覆盖日志、工具方法、数据处理和依赖注入等常见需求。
精选 4 款基于 C# 的开源工具类库,开发效率提升利器!
1. Newtonsoft.Json (Json.NET)
📌 场景:对象序列化 / 反序列化、配置文件解析、Web API 数据交互
🔹 亮点功能
- 强大的 JSON 序列化与反序列化能力
- 支持动态解析
JObject
、JArray
- 灵活的属性映射与忽略策略
- 支持 LINQ to JSON 查询
🔹 使用示例
using Newtonsoft.Json;
var person = new { Name = "Alice", Age = 25 };
string json = JsonConvert.SerializeObject(person);
var obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.Name); // Alice
🔗 开源地址:https://github.com/JamesNK/Newtonsoft.Json
2. AutoMapper
📌 场景:对象映射(DTO ↔ Entity)、简化层间数据传输
🔹 亮点功能
- 自动完成对象属性之间的映射
- 支持复杂嵌套对象与集合
- 映射规则可配置,减少模板代码
- 常用于 Web API 返回 DTO、数据库实体与 ViewModel 转换
🔹 使用示例
using AutoMapper;
public class User { public string Name { get; set; } }
public class UserDto { public string Name { get; set; } }
var config = new MapperConfiguration(cfg => cfg.CreateMap<User, UserDto>());
var mapper = config.CreateMapper();
var user = new User { Name = "Bob" };
UserDto dto = mapper.Map<UserDto>(user);
Console.WriteLine(dto.Name); // Bob
🔗 开源地址:https://github.com/AutoMapper/AutoMapper
3. Serilog
📌 场景:结构化日志记录、调试、监控
🔹 亮点功能
- 支持丰富的日志输出目标(控制台、文件、数据库、ElasticSearch、Seq 等)
- 结构化日志,方便分析与查询
- 可结合 ASP.NET Core 的内置日志系统
🔹 使用示例
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log.txt")
.CreateLogger();
Log.Information("Hello, {Name}!", "C# Developer");
🔗 开源地址:https://github.com/serilog/serilog
4. Polly
📌 场景:容错处理、重试机制、熔断降级
🔹 亮点功能
- 重试策略(指定次数 & 时间间隔)
- 熔断器(失败达到阈值后阻止请求)
- 超时控制、回退策略
- 常用于微服务、调用外部 API 时提高稳定性
🔹 使用示例
using Polly;
var policy = Policy
.Handle<Exception>()
.Retry(3, (ex, retryCount) =>
{
Console.WriteLine($"Retry {retryCount} due to {ex.Message}");
});
policy.Execute(() =>
{
Console.WriteLine("Trying...");
throw new Exception("Network error!");
});
🔗 开源地址:https://github.com/App-vNext/Polly
总结
类库 | 主要用途 | 适用场景 |
---|---|---|
Newtonsoft.Json | JSON 序列化 & 解析 | Web API、配置管理 |
AutoMapper | 对象映射 | DTO ↔ Entity 转换 |
Serilog | 结构化日志 | 日志管理、监控系统 |
Polly | 容错与重试 | 微服务、外部 API 调用 |
✅ 有了这几款工具类库,C# 开发中的数据处理、日志记录、对象转换、容错机制都能轻松搞定,大大提高效率。
好 👌 那我就为你整理一份 实战组合方案 —— 在一个 ASP.NET Core Web API 项目中,同时使用 Serilog + AutoMapper + Polly + Newtonsoft.Json,帮你理解如何搭配使用这些工具类库来提升开发效率。
ASP.NET Core Web API 实战:Serilog + AutoMapper + Polly + Newtonsoft.Json 组合方案
1. 项目初始化
- 新建项目:
dotnet new webapi -n DemoApi
cd DemoApi
- 安装 NuGet 包:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.File
dotnet add package Serilog.Sinks.Console
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
dotnet add package Polly
dotnet add package Newtonsoft.Json
2. 配置 Serilog 日志系统
编辑 Program.cs
:
using Serilog;
var builder = WebApplication.CreateBuilder(args);
// 配置 Serilog
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
builder.Host.UseSerilog();
builder.Services.AddControllers()
.AddNewtonsoftJson(); // 使用 Newtonsoft.Json
var app = builder.Build();
app.MapControllers();
app.Run();
🔹 作用:
- 所有日志会输出到 控制台 和 文件 logs/log.txt
- 支持结构化日志(方便后续接入 ELK / Seq 等平台)
3. 使用 Newtonsoft.Json 作为序列化工具
修改 Program.cs
里的:
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
🔹 作用:
- 自动格式化 JSON 输出
- 忽略
null
值字段 - 控制器返回对象时默认使用 Newtonsoft.Json 进行序列化
4. 配置 AutoMapper
4.1 定义实体类与 DTO
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class UserDto
{
public string Name { get; set; }
}
4.2 定义映射配置
using AutoMapper;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<User, UserDto>();
}
}
4.3 在 Program.cs 注册 AutoMapper
builder.Services.AddAutoMapper(typeof(Program));
4.4 使用 AutoMapper
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
private readonly IMapper _mapper;
public UsersController(IMapper mapper)
{
_mapper = mapper;
}
[HttpGet("{id}")]
public IActionResult GetUser(int id)
{
var user = new User { Id = id, Name = "Alice" };
var dto = _mapper.Map<UserDto>(user);
return Ok(dto); // 返回 JSON
}
}
5. 使用 Polly 处理外部 API 调用
5.1 注册 HttpClient + Polly 策略
using Polly;
using Polly.Extensions.Http;
builder.Services.AddHttpClient("ExternalApi", client =>
{
client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");
})
.AddPolicyHandler(HttpPolicyExtensions
.HandleTransientHttpError()
.WaitAndRetryAsync(3, retryAttempt =>
TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)))); // 重试策略
5.2 控制器中调用
[ApiController]
[Route("api/[controller]")]
public class ExternalController : ControllerBase
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly ILogger<ExternalController> _logger;
public ExternalController(IHttpClientFactory httpClientFactory, ILogger<ExternalController> logger)
{
_httpClientFactory = httpClientFactory;
_logger = logger;
}
[HttpGet("posts")]
public async Task<IActionResult> GetPosts()
{
var client = _httpClientFactory.CreateClient("ExternalApi");
var response = await client.GetAsync("posts");
if (!response.IsSuccessStatusCode)
{
_logger.LogError("请求外部 API 失败,状态码:{StatusCode}", response.StatusCode);
return StatusCode((int)response.StatusCode, "外部服务不可用");
}
var json = await response.Content.ReadAsStringAsync();
return Content(json, "application/json");
}
}
🔹 作用:
- 如果调用外部 API 失败,自动重试 3 次,重试间隔 指数退避
- 结合 Serilog,可以记录错误日志
6. 最终效果
- Serilog → 记录 Web API 的所有请求/错误日志
- Newtonsoft.Json → 美观、灵活的 JSON 序列化
- AutoMapper → 简化 DTO 与实体的转换
- Polly → 外部 API 调用稳定可靠
当你访问:
GET https://localhost:5001/api/users/1
返回:
{
"name": "Alice"
}
调用外部 API:
GET https://localhost:5001/api/external/posts
会自动应用 Polly 重试策略,并且 日志写入文件和控制台。
✅ 通过这套组合,你的 ASP.NET Core Web API 项目就具备了:
- 稳定性(Polly 容错)
- 可维护性(AutoMapper 简化代码)
- 可观测性(Serilog 日志)
- 灵活性(Newtonsoft.Json 序列化)
发表回复