C# 如何使用json.net(JObject/Jarray/Jtoken)并以最快的方式将类转换为字典?
如何使用json.net(JObject/Jarray/Jtoken)并以最快(性能)的方式将类转换为字典?字典的关键是json文件中的sees“name” 有人能帮忙吗 非常感谢C# 如何使用json.net(JObject/Jarray/Jtoken)并以最快的方式将类转换为字典?,c#,json,c#-4.0,json.net,C#,Json,C# 4.0,Json.net,如何使用json.net(JObject/Jarray/Jtoken)并以最快(性能)的方式将类转换为字典?字典的关键是json文件中的sees“name” 有人能帮忙吗 非常感谢 seed.json { "Seed": [ { "name": "Cheetone", "growthrate": 1, "cost
seed.json
{
"Seed": [
{
"name": "Cheetone",
"growthrate": 1,
"cost": 500
},
{
"name": "Tortone",
"growthrate": 8,
"cost": 100
}
],
}
public class SoilStat
{
public int growthRate;
public int cost;
}
public class DataLoader : MonoSingleton<DataLoader>
{
public string txt;
Dictionary<string, SoilStat> _soilList = new Dictionary<string, SoilStat>();
JObject rawJson = JObject.Parse(txt);
???
}
seed.json
{
“种子”:[
{
“名称”:“奇通”,
“成长型”:1,
“成本”:500
},
{
“名称”:“Tortone”,
“成长型”:8,
“成本”:100
}
],
}
公共级SoilStat
{
公共收入增长率;
公共成本;
}
公共类数据加载器:MonoSingleton
{
公共字符串txt;
字典_soilList=新字典();
JObject rawJson=JObject.Parse(txt);
???
}
根据我的经验,使用JsonConvert
比使用JObject.Parse()要快得多。请参阅(在Windows Phone上,但我认为在桌面上也会类似),从该页面链接的是。一种简单的方法来完成您想要做的事情,就是用它挑选您感兴趣的JSON部分,然后反序列化这些部分。因此:
var rawJson = JObject.Parse(txt);
var _soilList = rawJson.SelectTokens("Seed[*]").ToDictionary(t => t["name"], t => t.ToObject<SoilStat>());
var rawJson=JObject.Parse(txt);
var_soilList=rawJson.SelectTokens(“Seed[*]).ToDictionary(t=>t[“name”],t=>t.ToObject());
更复杂的解决方案是创建反序列化,然后将它们映射到所需的类:
public class NamedSoilStat : SoilStat
{
public string name { get; set; }
}
public class RootObject
{
public RootObject() { this.Seed = new List<NamedSoilStat>(); }
public List<NamedSoilStat> Seed { get; set; }
}
公共类名称SoilStat:SoilStat
{
公共字符串名称{get;set;}
}
公共类根对象
{
public RootObject(){this.Seed=new List();}
公共列表种子{get;set;}
}
然后:
var root = JsonConvert.DeserializeObject<RootObject>(txt);
var _soilList = root.Seed.ToDictionary(t => t.name, t => new SoilStat { cost = t.cost, growthRate = t.growthRate });
var root=JsonConvert.DeserializeObject(txt);
var_soilList=root.Seed.ToDictionary(t=>t.name,t=>newsoilstat{cost=t.cost,growthRate=t.growthRate});
至于哪一个性能更好,你需要
顺便说一下,如果您的代码> TXT < /Cord> JSON字符串来自一个文件,并且是大的,您应该考虑将它流进去,而不是将其读入中间字符串。请参阅。什么是\u txtaste
?是上面的JSON片段吗?如果是,请提供您正在使用的实际有效的JSON?(事实上,它的格式不正确)您的问题听起来非常笼统,但实际显示的代码似乎并非如此。字典键应该是什么?用“最快”更新代码@dbcBy你的意思是“性能最好”还是“最简单”?那么我可以告诉你。我可以给你一个非常简单的方法来做你想做的事情,但是你需要自己做性能测试。想要吗?谢谢,但是我如何使用JsonConvert.DeserializeObject到以种子“name”为键的字典中?由于unity5的某些限制,我无法使用selecttoken。有没有其他方法可以不创建DTO对象就完成此操作@dbc