Json到字典C#Unity
我正在尝试将JSONNode更改为词汇表。我已经找了几个小时的解决办法。我知道JsonUtilities不适用于字典。我尝试的每件事都给出了Json到字典C#Unity,c#,json,dictionary,unity3d,C#,Json,Dictionary,Unity3d,我正在尝试将JSONNode更改为词汇表。我已经找了几个小时的解决办法。我知道JsonUtilities不适用于字典。我尝试的每件事都给出了test4=null,没有错误 JSONNode test1 = JSON.Parse(customData); //customData is :"{\"ItemClass\":\"S\",\"Type\":\"Band\",\"Stats\":
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);
var test4=JsonConvert.DeserializeObject(test3);
var test4=JsonConvert.DeserializeObject(test3);
var test4=JsonConvert.DeserializeObject您更愿意使用json的正确数据结构表示(例如使用) 那你可以用
var root = JsonConvert.DeserializeObject<Root>(jsonString);
注意:在智能手机上输入,但我希望想法变得清晰这个答案准确地显示了如何将json移动到Unity中的Dictionary,而不是直接序列化一个Dictionary,然后反序列化它,我建议您创建键和值的列表。当您想使用JSON中的字典时,请将列表添加到空字典中。@SeLeCtRa我建议使用相反的方法,而是直接使用
Newtonsoft.Net JSON完全支持的dictionary
。test3中是否有办法访问字典(如图所示)?链接中提供的示例使用类作为我的示例,没有真正的类……也许我没有得到什么。
var root = JsonConvert.DeserializeObject<Root>(jsonString);
foreach(var stat in root.Stats)
{
foreach(var kvp in stat)
{
Debug.Log($"{kvp.Key}:{kvp.Value}");
}
}
[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}");
}