.NET Framework中报错命名空间System.Text中不存在类型或命名空间名Json

.NET Framework中报错命名空间System.Text中不存在类型或命名空间名Json

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS0234 命名空间"System.Text"中不存在类型或命名空间名"Json"(是否缺少程序集引用?) M3U8_Download F:\Merchant\merchant202501\autocookie\M3U8_Download\Form1.cs 84 活动

复制代码
严重性 代码  说明  项目  文件  行 禁止显示状态
错误  CS0234  命名空间“System.Text”中不存在类型或命名空间名“Json”(是否缺少程序集引用?) M3U8_Download F:\Merchant\merchant202501\autocookie\M3U8_Download\Form1.cs  84  活动

🔍 原因分析

System.Text.Json.NET Core 3.0 及以上(包括 .NET 5、6、7、8、9 等)才内置提供的 JSON 序列化库。

如果你的项目是:

  • .NET Framework (如 .NET Framework 4.7.2、4.8 等), → 那么默认不包含 System.Text.Json,会报这个错。
✅ 方案一:升级项目到 .NET 5+(推荐)

如果你可以更改项目目标框架:

  1. 右键项目 → 属性

  2. 目标框架 改为 .NET 6.NET 8 或更高(建议 .NET 8)

  3. 重新生成项目

这样 System.Text.Json 就可以直接使用,无需额外安装包。

✅ 方案二:在 .NET Framework 项目中使用 System.Text.Json(需手动安装 NuGet 包)

如果你必须使用 .NET Framework(比如 WinForms 旧项目),可以安装官方兼容包

// ExecuteScriptAsync 返回的是 JSON 格式的字符串 string jsonResult = await webView21.CoreWebView2.ExecuteScriptAsync(script); // 对于简单类型,可以直接去除引号 return System.Text.Json.JsonSerializer.Deserialize<string>(jsonResult); 不安装重新修改代码解析

✅ 解决方案:手动解析简单 JSON 字符串(无需任何额外库)

ExecuteScriptAsync 的返回规则如下:

  • 如果 JS 返回的是 字符串 ,结果是带双引号的 JSON 字符串,例如:"hello" → C# 得到 "\"hello\""

  • 如果 JS 返回的是 数字、布尔、null ,结果是无引号的:42truenull

  • 如果是对象或数组,会返回完整 JSON,如 {"a":1}

对于 只返回简单字符串 的场景,你可以用 简单的字符串处理 来"去 JSON 化",而不需要反序列化库。

复制代码
情况 1:你确定 JS 返回的是 字符串
string jsonResult = await webView21.CoreWebView2.ExecuteScriptAsync(script);
​
// 去除首尾的双引号,并处理转义(简单场景)
if (!string.IsNullOrEmpty(jsonResult) && jsonResult.StartsWith("\"") && jsonResult.EndsWith("\""))
{
    // 移除首尾引号,并将 \" 还原为 "
    string unquoted = jsonResult.Substring(1, jsonResult.Length - 2)
                                      .Replace("\\\"", "\"")
                                      .Replace("\\\\", "\\");
    return unquoted;
}
else if (jsonResult == "null")
{
    return null;
}
else
{
    // 不是字符串(比如返回了数字或布尔),直接返回原始内容
    return jsonResult;
}

✅ 推荐:使用 .NET Framework 自带的 JavaScriptSerializer(无需安装任何包!)

.NET Framework 本身就内置了 System.Web.Script.Serialization.JavaScriptSerializer完全免费、无需 NuGet

示例代码:
复制代码
using System.Web.Script.Serialization;
​
// ...
​
string jsonResult = await webView21.CoreWebView2.ExecuteScriptAsync(script);
​
var serializer = new JavaScriptSerializer();
// 如果 JS 返回的是字符串,jsonResult 是 "\"value\"",反序列化后得到 "value"
string result = serializer.Deserialize<string>(jsonResult);
return result;
  • 是 .NET Framework 官方自带的类(虽然老旧,但够用)

🔔 注意:你需要添加对 System.Web.Extensions 程序集的引用(大多数 WinForms 项目默认已包含,如果没有):

  • 右键项目 → 添加引用 → 程序集 → 框架 → 勾选 System.Web.Extensions
相关推荐
梦帮科技17 分钟前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
程序员泠零澪回家种桔子19 分钟前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain27 分钟前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
缺点内向1 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
骇客野人1 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战2 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘2 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays10112 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠2 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea