如何使用C#-Unity将Json文件转换为Dictionary

时间:2019-05-19 06:55:38

标签: c# json dictionary unity3d

我正在尝试在Unity-C#中获取一个Json数据集并将其转换为Dictionary

{
1:
    {
        "uni_number": 001,
        "level" : 3,
        "Hp" : 15
    },
    2:
    {
        "uni_number": 000,
        "level" : 0,
        "Hp" : 0
    }
}

(如果需要,我可以使用intigers字符串)当我要保存游戏时,还需要将字典文件转换回json文件。

我检查了几个不同的StackOverflow问题,但似乎无法弄清楚。我尝试使用JsonUtility将其解析为Dictionary。

这是我想变成字典的json文件

string json = @"1:{""uni_number"": 001,""level"" : 3,""Hp"" : 15},2:{""uni_number"": 000,""level"" : 0,""Hp"" : 0}";

这是我尝试过的事情之一,如果我可以使它工作,那么我在向其添加另一个深度之后应该可以从那里完成它。

string json = @"{""uni_number"": ""001"",""level"" : ""3"", ""Hp"": ""15""}";

Dictionary<string, string> loadedData = JsonUtility.FromJson<Dictionary<string, string>>(json);

这不会给我一个错误,但是当我尝试打印它时,它什么也不打印。这是我的打印方式。

foreach (KeyValuePair<string, string> kvp in loadedData)
        {
            print("Key = {0}, Value = {1}");
            print(kvp.Key);
            print(kvp.Value);
        }

我也尝试过

string loadedData = JsonUtility.FromJson<string>(@"{""uni_number"": ""001"",""level"" : ""3"", ""Hp"": ""15""}");

print (loadedData)

,它不会打印任何内容,所以我认为我使用的JsonUtility函数错误,但是我不知道如何。

如果我无法使它正常工作,我可能可以制作自己的函数,将json文件转换为字典,但这可能会给but带来很大的麻烦。

1 个答案:

答案 0 :(得分:1)

我正在使用Newtonsoft.Json,它的工作原理是: (请注意,每个值也是一个字典(键,值对))

     string json = @"{
                    1:
                    {
                        ""uni_number"": 001,
                        ""level"" : 3,
                        ""Hp"" : 15
                    },
                    2:
                    {
                        ""uni_number"": 000,
                        ""level"" : 0,
                        ""Hp"" : 0
                    }
                    }";

        var values = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string,string>>>(json);
        foreach (var uni in values)
        {
            //you can print values here or add to a list or ...
              string uni_number=  uni.Value["uni_number"];
              string level=  uni.Value["level"];
              string Hp=  uni.Value["Hp"];

        }