零点实战:C# 读取 MySQL 数据并安全封装 Json 数据的避坑指南

大家好,我是零点博客的老张。最近在优化咱们的后台管理系统,涉及到大量数据从前端传到后端,再从后端传给前端展示。在这个过程中,Json数据成了咱们交流的“通用语言”。很多人写代码图省事,直接把数据库查出来的数据拼接字符串,结果要么中了 SQL 注入,要么返回的 Json 数据结构乱七八糟,前端解析全崩。今天咱们就来聊聊,在 C# 开发中,如何优雅、安全地从 MySQL 拉取数据并转换成规范的 Json 数据。

一、 为什么不让 ORM 直接甩出 Json?

其实直接用 EFCore 或者 Dapper 这种 ORM 框架确实省事,一条语句全搞定。但为了帮大家彻底搞懂底层逻辑,也为了做爬虫开发或者定制开发时能更灵活地控制数据,我还是建议大家手动处理一下数据的流转。特别是当你的数据量大,或者需要对数据做清洗时,手动编写代码往往比依赖框架配置更可控。

二、 核心步骤:从 SQL 到 Json 的完整链路

咱们以一个经典的获取博客文章列表为例。这一步得记好:查数据、过滤数据、转对象、转 Json。

1. SQL 查询与预处理(防注入是底线)

以前咱们可能会把参数直接拼进 SQL 里,现在不行。必须用预处理语句,这是保护网站不被黑最基础的一步。咱们用 C# 的 `SqlCommand` 配合 `SqlParameter`。

string sql = "SELECT title, content, post_date FROM emlog_articles WHERE status = 1";
using (SqlConnection conn = new SqlConnection("YourConnectionString"))
{
    conn.Open();
    // 使用预处理语句,防止 SQL 注入
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    {
        // 如果有筛选条件,比如按分类查,这里必须加参数
        // cmd.Parameters.AddWithValue("@cat_id", categoryId); 

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 在这里构建咱们自定义的实体类
                // 这里的逻辑就是把数据库的行数据变成一个对象
            }
        }
    }
}

2. 正则表达式清洗数据

在把数据交给 Json 序列化之前,强烈建议清洗一下。比如博客文章里可能包含恶意脚本,或者格式不对的换行符。咱们用 C# 的 `System.Text.RegularExpressions` 做个简单的过滤。

string cleanContent = Regex.Replace(rawContent, "<[^>]+>", string.Empty); // 去除 HTML 标签
cleanContent = Regex.Replace(cleanContent, "\\s+", " "); // 合并多余空格

3. 对象转 Json 数据(核心重点)

现在咱们拿到了一个干净的 Article 对象。接下来就是把它变成 Json 数据。在 C# 里,推荐使用微软自带的 `System.Text.Json`,性能比老牌的 Newtonsoft.Json 快,而且不需要额外安装包。

using System.Text.Json;

// 假设 article 是上面封装好的对象
// 设置命名策略,让生成的 Json 字段名是首字母大写的驼峰格式,更符合前端习惯
var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    WriteIndented = true // 格式化输出,方便调试和 SEO(利于蜘蛛抓取结构化数据)
};

string jsonString = JsonSerializer.Serialize(article, options);

// 此时 jsonString 就是一段标准的 Json 数据,可以直接返回给前端

三、 避坑指南:零点博客开发经验谈

  • 关于 JSON 空值: 有时候数据库字段可能为 NULL,如果不处理好,前端会报错。在转换 Json 前最好做个默认值处理。
  • 关于乱码: MySQL 里的字符集要是 UTF8mb4,C# 代码里也要指定 Encoding.UTF8,不然 Json 里的中文全是问号。
  • 性能优化: 如果数据量非常大,不要用 List<Article> 在内存里攒一大堆再转 Json。最好流式处理,查一条转一条,或者分页查询,这能有效降低内存占用。

四、 总结

写代码没有捷径,尤其是涉及数据库安全和数据格式转换时,必须得走“预处理 -> 清洗 -> 序列化”这条正规军路线。把 Json 数据处理好,不仅方便咱们后端做接口开发,还能让搜索引擎更精准地抓取咱们零点博客的内容。下次咱们再聊聊 PHP 端是如何利用这些接口来生成动态页面的,感兴趣的朋友点个关注,老张的实操教程干货不断!