Json 到字典 C# Unity

Posted

技术标签:

【中文标题】Json 到字典 C# Unity【英文标题】:Json to Dictionary C# Unity 【发布时间】:2021-05-23 11:50:47 【问题描述】:

我正在尝试将 JSONNode 更改为字典。我一直在寻找几个小时的解决方案。我知道 JsonUtilities 不适用于字典。我尝试的一切都给test4 = null,没有错误。

JSONNode test1 = JSON.Parse(customData);

//customData is :"\"ItemClass\":\"S\",\"Type\":\"Band\",\"Stats\":[\"HP\":\"100\",\"Atk\":\"50\",\"Def\":\"25\",\"Crit\":\"10\"]"

               
JSONArray test2 = test1["Stats"].AsArray;

               
JSONNode  test3 = test2[0];

TEST4 总是给我一个空值,我也尝试将 test3 更改为对象或字符串。以下是我尝试过的一些东西:

var test4 = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(test3);

var test4 = JsonConvert.DeserializeObject<List<Dictionary<string, int>>>(test3);

var test4 = JsonConvert.DeserializeObject<Dictionary<string, string>(test3);

var test4 = JsonConvert.DeserializeObject<Dictionary<string, int>(test3);

我正在尝试访问下图中的字典

https://i.stack.imgur.com/2JWLB.png

我确定我错过了一些超级简单的东西......

谢谢

【问题讨论】:

这个答案准确地展示了如何将 json 移动到 Unity 中的 Dictionary ***.com/a/38535392/294884 建议您为键和值创建列表,而不是直接序列化字典然后反序列化它。如果您想使用 JSON 中的字典,请将列表添加到空字典中。 @SeLeCtRa 我建议相反,而是直接使用DictionaryNewtonsoft .Net JSON 完全支持 有没有办法在 test3 中找到字典(如图所示)?提供的链接中的示例使用类作为我的示例,实际上并没有类....也许我没有得到任何东西。 【参考方案1】:

您宁愿使用正确的 json 数据结构表示(例如使用 json2csharp)

[Serializable]
public class Root    

    public string ItemClass; 
    public string Type; 
    public List<Dictionary<string,string>>; 

然后做

var root = JsonConvert.DeserializeObject<Root>(jsonString); 

foreach(var stat in root.Stats)

    foreach(var kvp in stat)
    
        Debug.Log($"kvp.Key:kvp.Value");
     

或者甚至不使用Dictionary,而是直接使用类似的类

[Serializable]
public class Stat

    public string HP; 
    public string Atk; 
    public string Def; 
    public string Crit; 


[Serializable]
public class Root

    public string ItemClass; 
    public string Type; 
    public List<Stat> Stats; 

那么你可以使用

var root = JsonConvert.DeserializeObject<Root>(jsonString); 

也可以内置

var root = JsonUtility.FromJson<Root>(jsonString);

然后做例如

foreach(var stat in root.Stats)

    Debug.Log($"HP:stat.HP, Ark:stat.Atk, Def:stat.Def, Crit:stat.Crit");


注意:在智能手机上输入,但我希望思路清晰

【讨论】:

以上是关于Json 到字典 C# Unity的主要内容,如果未能解决你的问题,请参考以下文章

C# 字典到 json - 自动排序

Unity 将嵌套字典序列化为 JSON

在字典的列表中添加变量(Dictionary<Key,List<var>)unity C#

100个 Unity实用技能| C# 检查字典中是否存在某个Key的几种方法

100个 Unity实用技能| C# 检查字典中是否存在某个Key的几种方法

100个 Unity实用技能| C# 检查字典中是否存在某个Key的几种方法