2016-01-24 44 views
0

我想創建一個顯示當前信息的應用程序,我可以使用一個簡單的API(至少它看起來很簡單)來獲取信息。如何從源中獲取特定的字符串?

現在,您可以使用API​​訪問網站並輸入用戶名。該網址將導致類似於這樣的內容site.web/api/public/user?name=Usename。該頁面上的 是我需要的所有信息,形式爲「代碼」的一行。

{"uniqueId":"hhus-7723dec98ecb9bc6643f10588e0bb3f4","name":"Username","figureString":"hr-125-40.hd-209-1369.ch-210-64.lg-270-1408.he-3329-1408-1408","selectedBadges":[],"motto":"sample txt","memberSince":"2012-08-25T14:01:04.000+0000","profileVisible":true,"lastWebAccess":null} 

我想提取該信息,並在我的程序,例如顯示它:

{"uniqueId":"this is an ID"} 

我僅希望被顯示的實際ID:這是一個ID。

感謝您的幫助!

回答

2

您收到的格式爲JSON。有很多庫可以很容易地閱讀它,在C#中使用最廣泛的是JSON.NET

如果你只需要提取一個屬性,你可以做這樣的事情:

string json = ... 
var obj = JObject.Parse(json); 
string uniqueId = obj["uniqueId"].Value<string>(); 

如果您還需要其他屬性,它可能更容易使用的反序列化:創建一個類具有相同的屬性JSON對象,並使用JsonConvert.DeserializeObject將JSON讀入類的一個實例。

+0

謝謝,終於搞明白了:D – Remi

1

嘗試所有這些你...

using System.IO; 
using System.Net; 
using Newtonsoft.Json.Linq; 
... 
WebClient client = new WebClient(); 
Stream stream = client.OpenRead("http://site.web/api/public/user?name=Usename"); 
StreamReader reader = new StreamReader(stream); 
string userJson = reader.ReadLine(); 
reader.Close(); 

JObject jObject = JObject.Parse(userJson); 
string uniqueId = (string)jObject["uniqueId"]; 
+0

我用webclient下載了json字符串,並且因爲某種原因沒有工作,對此也一樣。拋出的異常:System.dll中的'System.Net.WebException' 附加信息:遠程服務器返回錯誤:(463)。它適用於其他其他api,如Facebook的...只是不適用於我使用的網站。 – Remi

1

這是Json的一個例子。將數據反序列化到您定義的類的最安全的方式。

這樣的類看起來是這樣的:

public class MyClass 
{ 
    public string uniqueId { get; set; } 
} 

如果你有一個字符串數據,你可以只用Newtonsoft.Json NuGet包反序列化。

MyClass obj = JsonConvert.Deserialize<MyClass>(myJsonString); 

如果您從http獲取數據,那麼使用可以爲您執行反序列化的客戶端會更容易。這樣的客戶端在NuGet包Microsoft.AspNet.WebApi.Client發現

using(var client = new HttpClient()) 
{ 
    var response = await client.GetAsync(myUrl); 
    response.EnsureSuccessStatusCode(); 
    MyClass obj = await response.Content.ReadAsAsync<MyClass>(); 
} 

當然,這假定服務器是符合標準的,並且指定它的內容類型爲application/JSON

加成:這些類您反序列化爲可以從站點上的示例自動生成:http://json2csharp.com/

相關問題