2016-01-24 43 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/

相关问题