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

如何从ResX文件读取JSON?路径与读取逻辑问题排查

解决ResX读取JSON的路径问题+提取国家名称

一、先搞定ResX文件的正确路径

你写的@"\.\resources.resx"肯定找不到文件,程序默认会去bin目录里找,给你两种靠谱的写法:

1. 从项目根目录读取(推荐)

如果resources.resx在项目根目录,用AppContext.BaseDirectory拿到程序运行的基目录,再往上跳回到项目根:

string resxPath = Path.Combine(AppContext.BaseDirectory, @"..\..\..\resources.resx");

这里的..\..\..是从bin目录往上退3级(对应常规.NET项目结构),如果你的项目层级不一样,调整..的数量就行。

2. 让文件自动复制到bin目录(更省事)

右键项目里的resources.resx,属性里把复制到输出目录改成如果较新则复制或者始终复制,这样编译时文件会自动到bin文件夹,直接写文件名就行:

string resxPath = "resources.resx";

二、JSON读取的错误修正

你直接把resxSet.GetObject("allCivs")转成FileStream完全错了!ResX里存的应该是JSON的文本内容,不是文件流。正确的步骤是:

  1. 从ResX里取出allCivs对应的字符串
  2. 用JsonDocument.Parse解析这个字符串
  3. 遍历根节点的属性键,就是你要的国家名称

修正后的完整代码:

using System.Resources;
using System.Text.Json;
using System.IO;

// 选一种路径写法
string resxPath = Path.Combine(AppContext.BaseDirectory, @"..\..\..\resources.resx");
// 或者复制到输出目录后用:string resxPath = "resources.resx";

using (ResXResourceSet resxSet = new ResXResourceSet(resxPath))
{
    // 取出JSON字符串,别再转FileStream了!
    string jsonContent = resxSet.GetString("allCivs");
    if (string.IsNullOrEmpty(jsonContent))
    {
        // 处理找不到allCivs的情况,比如提示或者返回
        return;
    }

    using (JsonDocument document = JsonDocument.Parse(jsonContent))
    {
        JsonElement root = document.RootElement;
        // 遍历所有国家名称
        foreach (JsonProperty property in root.EnumerateObject())
        {
            string countryName = property.Name; // 比如"Austria"、"America"
            Console.WriteLine(countryName);
            
            // 如果要读国家的详细数据,用property.Value就行
            // 比如拿国旗路径:string flag = property.Value.GetProperty("Флаг").GetString();
        }
    }
}

三、几个要注意的点

  • 确认ResX里的allCivs项是字符串类型,存的是allCivs.json的完整文本,不是文件路径。
  • 检查你的JSON格式!你给的示例里有语法错误,正确的结构应该是一个大对象包含所有国家的键值对,不能写成对象数组:
    {
      "Austria": { ... },
      "America": { ... }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:10:30