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 我建议相反,而是直接使用Dictionary
,Newtonsoft .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的主要内容,如果未能解决你的问题,请参考以下文章
在字典的列表中添加变量(Dictionary<Key,List<var>)unity C#
100个 Unity实用技能| C# 检查字典中是否存在某个Key的几种方法