2011-04-06 33 views
2

我正在研究一些涉及使用Bit.ly API的東西,並允許用戶選擇格式(文本,XML,Json)文本& XML已完成。這是返回的JSON結果時,你縮短網址:Bitly,Json和C#

{ 
    "status_code": 200, 
    "status_txt": "OK", 
    "data": 
    { 
     "long_url": "http:\/\/panel.aspnix.com\/Default.aspx?pid={Removed}", 
     "url": "http:\/\/rlm.cc\/gtYUEd", 
     "hash": "gtYUEd", 
     "global_hash": "evz3Za", 
     "new_hash": 0 
    } 
} 

而這個C#代碼只是正常解析,並獲取短網址:

var serializer2 = new JavaScriptSerializer(); 
var values2 = serializer2.Deserialize<IDictionary<string, object>>(json); 
var results2 = values2["data"] as IDictionary<string, object>; 
var shortUrl2 = results2["url"]; 
expandedUrl = results2["url"].ToString(); 
return results2["url"].ToString(); 

現在,這裏的Json的送回擴展一個URL時:

{ 
    "status_code": 200, 
    "status_txt": "OK", 
    "data": 
    { 
     "expand": 
     [ 
      { 
      "short_url": "http:\/\/rlm.cc\/gtYUEd", 
      "long_url": "http:\/\/panel.aspnix.com\/Default.aspx?pid={Removed}", 
      "user_hash": "gtYUEd", 
      "global_hash": "evz3Za" 
      } 
     ] 
    } 
} 

廣告這是我的問題開始的地方,我怎麼可以改變我目前的C#中能夠處理這兩種情況下,因爲你可以看到他們彼此大不相同。有任何想法嗎?

回答

3

我通常使用Json.NET來cherrypick值了JSON文件。語法非常簡潔。如果引用NewtonSoft.Json.dll使用Newtonsoft.Json.Linq,你可以寫:

var job = JObject.Parse(jsonString); 
if (job["data"]["expand"] == null) 
{ 
    Console.WriteLine((string)job["data"]["url"]); 
} 
else 
{ 
    Console.WriteLine((string)job["data"]["expand"][0]["long_url"]); 
} 

如果jsonString是:

string jsonString = @"{""status_code"": 200, ""status_txt"": ""OK"", ""data"": {""long_url"": ""http:\/\/panel.aspnix.com\/Default.aspx?pid={Removed}"", ""url"": ""http:\/\/rlm.cc\/gtYUEd"", ""hash"": ""gtYUEd"", ""global_hash"": ""evz3Za"", ""new_hash"": 0 }}"; 

常規顯示http://rlm.cc/gtYUEd

如果jsonString是:

string jsonString = @"{""status_code"": 200, ""status_txt"": ""OK"", ""data"": { ""expand"": [ { ""short_url"": ""http:\/\/rlm.cc\/gtYUEd"", ""long_url"": ""http:\/\/panel.aspnix.com\/Default.aspx?pid={Removed}"", ""user_hash"": ""gtYUEd"", ""global_hash"": ""evz3Za"" } ] } }"; 

例程將顯示http://panel.aspnix.com/Default.aspx?pid={Removed}

+0

正是我在找的,謝謝 – PsychoCoder 2011-04-06 03:55:30

0

假設提供程序與發送的表單一致,您是否需要具有處理兩者的代碼?它應該是直接處理每個人。

如果不能提前知道的時候你會得到哪種格式回來,你可以做到以下幾點:

if (results2.ContainsKey("expand")) 
{ 
    //Second example 
} 
else 
{ 
    //First example 
} 
0

不知道我得到了你的問題。爲什麼你不測試,如果你有縮短結果或擴大結果?因爲它們是不同的,這可以很容易地通過簡單的做「如果()」語句:

if (results2.ContainsKey("expand")) { 
    // handle the expand part 
} else { 
    // handle the shorten part 

}