2017-03-31 74 views
0

使用C#解析JSON URL我遇到了一些問題。正如你所知,JSON數據被寫爲名稱/值對。現在在URL JSON我有這些數據:解析C#中的JSON名稱對#

{ 
    "currentVersion":10.41, 
    "serviceDescription":"There are some text here", 
    "hasVersionedData":true, 
    "supportsDisconnectedEditing":false, 
    "syncEnabled":false, 
    "supportedQueryFormats":"JSON", 
    "maxRecordCount":1000 
} 

,我只想用這個代碼

using (var wc = new WebClient()) 
{ 
    string json = wc.DownloadString("http://xxxxxxxxx?f=pjson"); 
    try 
    { 
     dynamic data = Json.Decode(json); 
     for (int i = 0; i <= data.Length - 1; i++) 
     { 
      Console.WriteLine(data[0]); 
     } 

    } 
    catch (Exception e) 
    { 

    } 
} 

打印出來的JSON數據的名稱部分,但這不打印在控制檯上的任何東西!你能否讓我知道我在做什麼錯了?

+1

的可能的複製[如何從URL JSON字符串?](http://stackoverflow.com/questions/5566942/how-to-get-a-json-string-from-url) – scrappedcola

+0

你得到了什麼錯誤?你正在吃掉異常。嘗試寫入控制檯和看到錯誤 –

+0

我沒有得到任何錯誤!只是emply控制檯 – Behseini

回答

2

使用Newtonsoft JSON

JObject jsonObject = JObject.Parse(json); 
foreach(var jsonItem in jsonObject) 
{ 
    Console.WriteLine(jsonItem.Key); 
} 
Console.ReadKey(); 
0

創建一個對象來保存結果

public class RootObject 
{ 
    public double currentVersion { get; set; } 
    public string serviceDescription { get; set; } 
    public bool hasVersionedData { get; set; } 
    public bool supportsDisconnectedEditing { get; set; } 
    public bool syncEnabled { get; set; } 
    public string supportedQueryFormats { get; set; } 
    public int maxRecordCount { get; set; } 
} 

使用JavaScriptSerializer反序列化的結果。

var serializer = new JavaScriptSerializer(); 
var rootObject= serializer.Deserialize<RootObject>(json); 

Console.WriteLine(rootObject.currentVersion); 
Console.WriteLine(rootObject.serviceDescription); 
etc. 
0

如果您正在調試下運行這一點,在這裏看到:Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed一次我未選中啓用在Visual Studio宿主進程將其與運行結果。然而,要得到什麼,我想你想(每個鍵/值對的列表,我切換到一個foreach,它很好地打印出來:

try 

    {  
     var data = Json.Decode(jsonData);  
     //for (var i = 0; i <= data.Length - 1; i++)  
     foreach (var j in data)  
     {  
      Console.WriteLine(j);  
     }  
    }  
    catch (Exception e)  
    {  
     Console.WriteLine(e);  
    }