Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用json.net(JObject/Jarray/Jtoken)并以最快的方式将类转换为字典?_C#_Json_C# 4.0_Json.net - Fatal编程技术网

C# 如何使用json.net(JObject/Jarray/Jtoken)并以最快的方式将类转换为字典?

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

如何使用json.net(JObject/Jarray/Jtoken)并以最快(性能)的方式将类转换为字典?字典的关键是json文件中的sees“name”

有人能帮忙吗

非常感谢

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