You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.6类库中嵌入JSON转JObject报错的原生解决方法

解决嵌入JSON文件解析为JObject的问题

这个问题我之前碰到过,根源是你通过Resources.resx添加JSON文件时,Visual Studio自动把JSON内容转义成了字符串字面量,导致读出来的不是原始的JSON结构,而是带首尾引号和转义斜杠的包装字符串,自然会让JObject.Parse报错。

推荐的原生解决方案:直接将JSON文件设为嵌入资源

不要通过Resources.resx管理JSON文件,而是直接操作嵌入资源:

  1. 设置文件属性:

    • 在解决方案资源管理器中选中你的test.json文件
    • 右键→属性,将生成操作改为嵌入的资源
  2. 读取并解析JSON:
    使用程序集的GetManifestResourceStream方法读取原始的JSON内容,这样就能拿到未被转义的纯JSON字符串:

    using System.IO;
    using System.Reflection;
    using Newtonsoft.Json.Linq;
    
    // 获取当前类库的程序集
    var currentAssembly = Assembly.GetExecutingAssembly();
    // 资源名称格式:你的类库命名空间 + 文件路径(如果有子文件夹) + 文件名
    // 比如你的类库命名空间是MyClassLibrary,文件在根目录,那就是"MyClassLibrary.test.json"
    var resourceFullName = "YourClassLibraryNamespace.test.json";
    
    using (var resourceStream = currentAssembly.GetManifestResourceStream(resourceFullName))
    using (var streamReader = new StreamReader(resourceStream))
    {
        string rawJson = streamReader.ReadToEnd();
        JObject jsonObject = JObject.Parse(rawJson);
        // 这里就可以正常使用jsonObject了
    }
    
  3. 验证资源名称:
    如果不确定资源的完整名称,可以用下面的代码列出所有嵌入资源,找到你要的那个:

    var allResources = Assembly.GetExecutingAssembly().GetManifestResourceNames();
    foreach (var name in allResources)
    {
        Console.WriteLine(name);
    }
    

为什么原来的方法不行?

当你把JSON文件添加到Resources.resx时,Visual Studio会把它当作字符串资源处理,自动对内容中的特殊字符(比如双引号)进行转义,最终生成的资源内容就是带首尾引号的转义字符串,相当于你手动写了一个包含JSON的字符串字面量,而不是原始的JSON数据。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:39