【发布时间】:2010-10-03 07:24:07
【问题描述】:
http://xurrency.com/api 这个网络服务正在返回一个 json 响应消息。如何在我的 .net 项目(asp.net Web 应用程序)中将此消息用作对象
【问题讨论】:
http://xurrency.com/api 这个网络服务正在返回一个 json 响应消息。如何在我的 .net 项目(asp.net Web 应用程序)中将此消息用作对象
【问题讨论】:
您可以从定义将处理响应的模型类开始:
public class XurrencyResponse
{
public string Status { get; set; }
public string Code { get; set; }
public string Message { get; set; }
public Result Result { get; set; }
}
public class Result
{
public decimal Value { get; set; }
public string Target { get; set; }
public string Base { get; set; }
public DateTime Updated_At { get; set; }
}
拥有它们后,您只需调用服务即可:
class Program
{
static void Main()
{
var serializer = new JavaScriptSerializer();
string json = null;
using (var client = new WebClient())
{
json = client.DownloadString("http://xurrency.com/api/eur/gbp/1.5");
}
var response = serializer.Deserialize<XurrencyResponse>(json);
Console.WriteLine(response.Status);
}
}
【讨论】:
您需要将JSON数据deserialize转换成一个对象才能使用它。
【讨论】:
如果您引用System.Web.Extensions.dll 并将using System.Web.Script.Serialization; 指令添加到必要代码文件的顶部,那么您应该可以访问JavaScriptSerializer - 然后您只需创建一个看起来像 JSON 的类和调用`反序列化,即为
{"result":{"updated_at":"2010-10-02T02:06:00Z", "value":1.3014,"target":"gbp","base":"eur"}, "code":0, "status":"ok"}
你可能有:
public class XurrencyResponse {
public class Result {
public string updated_at {get;set;}
public decimal value {get;set;}
public string target {get;set;}
public string base {get;set;}
}
public Result result {get;set;}
public int code {get;set;}
public string status {get;set;}
}
然后调用serializer.Deserialize<XurrencyResponse>,其中serializer 是JavaScriptSerializer 实例。
【讨论】:
XurrencyResponse,大声笑,你在读我的心。相同的命名约定。我喜欢这样:-)
Result 有歧义
另一种选择是使用Json.NET
我在解析 Json 数据时一直在使用它,并且对这个库非常满意,因为如果您正在解析简单的输出,则不需要对显式类进行建模来保存数据,并且如果您使用它,它会为您提供高级功能需要解析更复杂的输出。
在您做出选择之前,请查看此库:)
【讨论】: