2014-03-06 72 views
-1

我試過谷歌搜索沒有看到任何東西..所以也許這是不可能的?如何使用json.net檢索JsonProperty?

我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... 
    } 

我試圖想出一個辦法說..搜索「伊芙琳」或「捷思「例如..並能夠拉起在」double Evenlynn「或」double Zed「下保存的值..但我無法想出除了能夠查找JsonProperty元素之外的任何其他方式..這是可能的?

我也接受其他解決方案..我完全卡住了。感謝

編輯:完整JSON文件位置:pastebin.com/9KWCCHk4

+0

爲什麼你想通過屬性名來訪問成員?你不能只使用變量名嗎?要獲得屬性數據,您需要使用反射:http://msdn.microsoft.com/en-us/library/z919e8tw.aspx – BradleyDotNET

+2

這完全不清楚你想要做什麼。你是否試圖從JSON字符串中解析出這些特定的值?你是否試圖將值傳遞給'JsonProperty'屬性? –

+1

目前還不清楚你要求什麼。你可以提供一些虛構的方法的輸入和輸出,可以做你想要的嗎? – StriplingWarrior

回答

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; } 
} 
+0

現在會嘗試,謝謝 – user1189352

+1

它工作。謝謝 – user1189352

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

啊我喜歡這個想法。將嘗試這條路線,回來看看它是怎麼回事 – user1189352

+0

我仍然有這個麻煩..我認爲,因爲班布魯內爾類是另一個班的一個子類...我編輯的OP ..你會怎麼去使用這種字典技術?我真的很喜歡這個想法,我只是無法繞過我如何做到這一點,因爲我的班級格式不幸從JSON文件中提取。 – user1189352

+1

@ user1189352你的json btw在哪裏?只要發佈它,不要讓我們猜你正在嘗試做什麼。 – I4V