如何使用json.net检索JsonProperty?

时间:2014-03-06 21:00:03

标签: c# json json.net

我试过谷歌搜索没有看到任何东西..所以也许这不可能?

我的JSON类有一堆像这样的变量,其中变量与jsonproperty匹配:

    public class JSONChampData
    {
            [JsonProperty("banpercent")]
            public Banpercent Banpercent { get; set; }
    }

    public class Banpercent
    {
        [JsonProperty("evelynn")]
        public double Evelynn { get; set; }

        [JsonProperty("zed")]
        public double Zed { get; set; }

        [JsonProperty("nunu")]
        public double Nunu { get; set; }

        etc...
    }

我正试图想出一个方法来说...例如搜索“evelynn”或“zed”......并且能够提升“双重Evenlynn”或“双重Zed”下的值。但我无法想到能够查找JsonProperty元素之外的任何其他方式..这可能吗?

我也对其他解决方案持开放态度......我完全陷入困境。感谢

编辑:完整的json文件:pastebin.com/9KWCCHk4

2 个答案:

答案 0 :(得分:2)

JsonProperty注释只是说你反序列化到该类的json将具有该属性。我认为你最好去词典,其中关键是冠军名称,价值是禁令百分比(Dictionary<string, double>()),但如果你想走这条路,你就会这样做;

    JsonTextReader reader = new JsonTextReader(new StringReader(json));
    JsonSerializer serializer = new JsonSerializer();
    Banpercent bans = serializer.Deserialize<Banpercent>(jsonReader);

然后说出zed的禁令百分比,你会这样做;

    double banRate = bans.Zed; 

所以更好的路线;

   Dictionary<string, double> bans = serializer.Deserialize<Dictionary<string, double>>(jsonReader);

然后你可以做;

   foreach (string key in bans.Keys)
   {
        Console.WriteLine(String.Format("{0}: {1}", key, bans[key]));
   } //writes all champ names and their ban rate

此外,使用JsonTextReader的代码可能会更简单一些。我根据我正在处理的实际项目中的代码进行了示例,它使用了读取器的东西来获得更高级的选项(模式验证),你可以使用一些其他的重载,只需将json作为一个字符串并摆脱它那一点。

答案 1 :(得分:1)

这适用于你的json。

var obj = JsonConvert.DeserializeObject<RootClass>(json);

public class RootClass
{
    public Dictionary<string,double> banpercent { get; set; }
    public Dictionary<string, double> banpercentchosen { get; set; }
    public Dictionary<string, double> winpicks { get; set; }
    public int games { get; set; }
    public Dictionary<string, double> pickpercentchosen { get; set; }
    public Dictionary<string, double> losspicks { get; set; }
    public Dictionary<string, double> pickpercent { get; set; }
    public Dictionary<string, double> banpicks { get; set; }
    public Dictionary<string, double> winpercent { get; set; }
    public Dictionary<string, double> totpicks { get; set; }
}