好嘞 🚀 我来为你整理 精选 4 款基于 C# 的开源工具类库,它们都能在日常开发中大幅提升效率,覆盖日志、工具方法、数据处理和依赖注入等常见需求。


精选 4 款基于 C# 的开源工具类库,开发效率提升利器!


1. Newtonsoft.Json (Json.NET)

📌 场景:对象序列化 / 反序列化、配置文件解析、Web API 数据交互

🔹 亮点功能

  • 强大的 JSON 序列化与反序列化能力
  • 支持动态解析 JObjectJArray
  • 灵活的属性映射与忽略策略
  • 支持 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.JsonJSON 序列化 & 解析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. 项目初始化

  1. 新建项目:
dotnet new webapi -n DemoApi
cd DemoApi

  1. 安装 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. 最终效果

  1. Serilog → 记录 Web API 的所有请求/错误日志
  2. Newtonsoft.Json → 美观、灵活的 JSON 序列化
  3. AutoMapper → 简化 DTO 与实体的转换
  4. 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 序列化)