英文:
How do I open json file from resx file?
问题
我有一个resources.resx文件和一个resources文件夹。我尝试从中获取一个json文件。
我拥有的代码
string resxFile = @".\resources.resx";
using (ResXResourceSet resxSet = new ResXResourceSet(resxFile)) {
using (JsonDocument document = JsonDocument.Parse((FileStream)resxSet.GetObject("allCivs"))) {
...
}
}
据我了解,我没有正确指定“resx”文件的路径,因为程序试图在“bin”文件夹中找到此文件。
我应该如何正确指定路径?我读取json文件的后续操作是否正确?
编辑:
allCivs.json中的数据(只有两个元素,总共有43个类似的元素):
"Austria": {
"Лидер": [
{
"image": "civStuffIcons/Австрия_Лидер1.png",
"Мария Терезия": {
"Персоналия": "Дипломатическая уния:Позволяет тратить золото на то, чтобы присоединять или делать сателлитами города-государства, которые оставались вашими союзниками 5 и более ходов."
}
}
],
"Уникальный юнит": [
{
"image": "civStuffIcons/Австрия_Уникальный юнит1.png",
"Гусар": {
"Эпоха": "Новейшее время",
"Замещает": "Кавалерист",
"Сила": "34"
}
}
],
"Уникальное здание": [
{
"image": "civStuffIcons/Австрия_Уникальное здание1.png",
"Кофейня": {
"Замещает": "Мельница",
"Эффект": "+5% ед. продукции +2 ед. продукции Увеличивает на 25% ОВЛ скорость возникновения великих людей в городе.Может быть построена в любом городе."
}
}
],
"Флаг": "civsFlags/austria.png"
},
{
"America":{
...
}
}
我需要循环遍历此文件,并且,例如,获取所有国家名称(在此示例中为“Austria”、“America”)。
英文:
I have resources.resx file and I have resources folder. I'm trying to get one json file from it.
code I have
string resxFile = @".\resources.resx";
using (ResXResourceSet resxSet = new ResXResourceSet(resxFile)) {
using (JsonDocument document = JsonDocument.Parse((FileStream)resxSet.GetObject("allCivs"))) {
...
}
}
As far as I understand, I am not correctly specifying the path to the "resx" file, because the program tries to find this file in the "bin" folder.
How can I correctly specify the path to it? Are my further actions for reading the json file correct?
EDIT:
data inside allCivs.json(just two elements,there are 43 like those):
"Austria": {
"Лидер": [
{
"image": "civStuffIcons/Австрия_Лидер1.png",
"Мария Терезия": {
"Персоналия": "Дипломатическая уния:Позволяет тратить золото на то, чтобы присоединять или делать сателлитами города-государства, которые оставались вашими союзниками 5 и более ходов."
}
}
],
"Уникальный юнит": [
{
"image": "civStuffIcons/Австрия_Уникальный юнит1.png",
"Гусар": {
"Эпоха": "Новейшее время",
"Замещает": "Кавалерист",
"Сила": "34"
}
}
],
"Уникальное здание": [
{
"image": "civStuffIcons/Австрия_Уникальное здание1.png",
"Кофейня": {
"Замещает": "Мельница",
"Эффект": "+5% ед. продукции +2 ед. продукции Увеличивает на 25% ОВЛ скорость возникновения великих людей в городе.Может быть построена в любом городе."
}
}
],
"Флаг": "civsFlags/austria.png"
},
{
"America":{
...
}
}
I need to loop through this file and, for example, get all country names(in this example it's "Austria","America")
答案1
得分: 1
最终代码
string resxFile = @".\resources.resx";
List<string> _listCountry = new List<string>();
using (ResXResourceSet resxSet = new ResXResourceSet(resxFile))
{
byte[] allCivs = (byte[])resxSet.GetObject("allCivs");
var texts = System.Text.Encoding.UTF8.GetString(allCivs, 0, allCivs.Length);
var jsonObject = JObject.Parse(texts);
foreach (var x in jsonObject)
{
_listCountry.Add(x.Key);
}
}
附加信息
-
解决第一个问题的方法是,你必须更改资源文件 resources.resx 的 "Copy to output directory" 属性。
- 右键点击 resources.resx -> 属性。
- 将 'Copy to output directory' 更改为 "Copy Always" 或 "Copy if Newer"。
-
读取一个键的值,你可以使用以下代码:
var Value = resxSet.GetString("allCivs");
- 读取所有键值对,你可以使用以下代码:
foreach (DictionaryEntry entry in resxSet)
{
string resourceKey = entry.Key.ToString();
object resource = entry.Value;
}
- 你可以使用以下代码从 JSON 文件中获取所有国家的列表:
using Newtonsoft.Json.Linq;
string text = File.ReadAllText(@"Test.json");
var jsonObject = JObject.Parse(text);
List<string> _list = new List<string>();
foreach (var x in jsonObject)
{
_list.Add(x.Key);
}
英文:
Fist, get file "allCivs" ,then you must parse json "allCivs" and Find Countries
Final Code
string resxFile = @".\resources.resx";
List<string> _listCountry = new List<string>();
using (ResXResourceSet resxSet = new ResXResourceSet(resxFile))
{
byte[] allCivs =(byte[]) resxSet.GetObject("allCivs");
var texts = System.Text.Encoding.UTF8.GetString(allCivs, 0, allCivs.Length);
var jsonObject = JObject.Parse(texts);
foreach (var x in jsonObject)
{
_listCountry.Add(x.Key);
}
}
Additional information
1.Way Solve Fist Problem ,you must change "Copy to output directory" properties on file resources.resx
> 1.Right click resources.resx -> properties.
>
> 2.Change 'Copy to output directory' to "Copy Always" or "Copy if Newer "
2.Read a key, you can use below code
var Value = resxSet.GetString("allCivs");
//using (JsonDocument document = JsonDocument.Parse((string)resxSet.GetObject("Test")))
//{
// var d = "";
//}
3.Read all of keys, you can use below code
foreach (DictionaryEntry entry in resxSet)
{
string resourceKey = entry.Key.ToString();
object resource = entry.Value;
}
4.You can get List Country in json file with use below code
using Newtonsoft.Json.Linq;
string text = File.ReadAllText(@"Test.json");
var jsonObject = JObject.Parse(text);
List<string> _list = new List<string>();
foreach (var x in jsonObject)
{
_list.Add(x.Key);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论