我试过谷歌搜索没有看到任何东西..所以也许这不可能?
我的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
答案 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; }
}