2014-12-07 122 views
0

我對使用JSON數據感興趣,並試圖從AWS網站反序列化定價數據。我已經構建了我的類(我做了Paste Special>將JSON數據粘貼爲類),但是當我試圖反序列化時,它涉及到Config類時會變得遲鈍。我相信我需要創建一個字典或做一個列表,但不知道如何正確嵌套。我嘗試了不同的東西,但似乎沒有任何工作。指出我在正確的方向,所以我可以弄明白,非常感謝。反序列化C#中的JSON數據#

public class Rootobject 
    { 
     public float vers { get; set; } 
     public Config config { get; set; } 
    } 

    public class Config 
    { 
     public string rate { get; set; } 
     public string valueColumns { get; set; } 
     public string currencies { get; set; } 
     public Region regions { get; set; } 
    } 

    public class Region 
    { 
     public string region { get; set; } 
     public Instancetype instanceTypes { get; set; } 
    } 

    public class Instancetype 
    { 
     public string type { get; set; } 
     public Size sizes { get; set; } 
    } 

    public class Size 
    { 
     public string size { get; set; } 
     public string vCPU { get; set; } 
     public string ECU { get; set; } 
     public string memoryGiB { get; set; } 
     public string storageGB { get; set; } 
     public Valuecolumn valueColumns { get; set; } 
    } 

    public class Valuecolumn 
    { 
     public string name { get; set; } 
     public Prices prices { get; set; } 
    } 

    public class Prices 
    { 
     public string USD { get; set; } 
    } 



    private static T _download_serialized_json_data<T>(string url) where T : new() { 
    using (var w = new WebClient()) { 
    var json_data = string.Empty; 
    // attempt to download JSON data as a string 
    try { 
     json_data = w.DownloadString(url); 
    } 
    catch (Exception) {} 
    // if string with JSON data is not empty, deserialize it to class and return its instance 
    return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T(); 
    } 
} 
+0

當我們看不到原始的JSON時,很難說出你的類應該是什麼樣子。另外請注意,捕獲異常並忽略它們幾乎不可能是一個好主意。 – 2014-12-07 12:41:07

回答

2

如果我參加了JSON從這裏並應用類,

https://a0.awsstatic.com/pricing/1/deprecated/ec2/pricing-on-demand-instances.json

一般的問題似乎是在它被指定值的數組的JSON,但你的類(ES )只會期望一個鍵/值。

例如,對於您的配置類(我剪下來的簡潔和JSON類)時,JSON看起來像這樣,

{ 
"vers": 0.01, 
"config": { 
    "rate": "perhr", 
    "valueColumns": [ 
     "linux", 
     "windows" 
    ] 
} 
} 

但你的類看起來是這樣的,

public class Config 
{ 
    public string rate { get; set; } 
    public string valueColumns { get; set; } 
} 

所以你的valueColumns只是期望一個值,而不是它們的數組。在JSON中,您可以看到它是一個數組,由於包裝值列的條目的[]。如果你嘗試deserialise你會得到一個例外,如..:

Additional information: Error reading string. Unexpected token: StartArray. Path 'config.valueColumns', line 5, position 22. 

基本上說,我看到一個數組的開始,但我不期待之一。因此,要解決這個問題,您可以簡單地將該屬性更改爲類中的數組,如下所示。

public class Config 
{ 
    public string rate { get; set; } 
    public string[] valueColumns { get; set; } 
} 
+0

就是這樣!謝謝!我應該撿起來的,但我是JSON新手,我仍然試圖圍繞它圍繞我的小腦袋。 – JonnyBravoJr 2014-12-07 14:25:01