我正在尝试使用HTTP请求从google shopping api返回json字符串的内容。到目前为止,我的工作似乎正在起作用,但我想知道如何使用对象的内容在页面上显示数据。
public string HttpGet(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
try
{
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
}
finally
{
response.Close();
}
}
protected void submit_Click(object sender, EventArgs e)
{
string json = HttpGet("https://www.googleapis.com/shopping/search/v1/public/products?key={KEY}4&country=UK&q=BX80637153570K&rankBy=price:ascending&maxResults=1&alt=json");
dynamic obj = JsonObject.Parse(json);
}
好的看看响应,看起来好像我需要一个C#类来返回json中返回的数据。我使用json2csharp.com创建了一个类。这是我需要从Json返回并在页面上显示的数据。也许这有助于更好地解释我的问题。
任何人都可以建议我如何在我的网站上使用这些信息。我现在有点迷失,因为我是这个人的新手,并尝试了几种不同的方法。如果这有所不同,我不需要所有返回的数据吗?只是价格和链接。
答案 0 :(得分:1)
假设动态obj正确填充,您可以在网页中使用它的内容 例如,如果json是:
{
"error" : {
"code": 400,
"message": "Bad Request"
}
}
您可以使用以下代码访问对象属性:
Response.Write("Error code is" + obj.error.code);
当然,Response.Write只是关于如何将检索到的数据发送到页面的示例。
修改1:
似乎使用的json转换器无法正常工作或无法正常工作。 在许多情况下,创建一个仅用于解析json的具体类是过分的,特别是因为C#4可以使用ExpandoObject
这是一个关于如何在动态对象中反序列化而无需创建具体对象的示例
var url = "http://www.google.com/ig/calculator?hl=en&q=100USD=?EUR";
string json = HttpGet(url);
//this is json string:
//{lhs: "100 U.S. dollars",rhs: "78.1799703 Euros",error: "",icc: true}
//now convert in a dynamic object
var jss = new DynamicJsonConverter();
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic obj = serializer.Deserialize(json, typeof(object));
//now you have access to json content
string text1 = obj.lhs;
string text2 = obj.rhs;
可以使用您可以在此处找到的代码创建DynamicJsonConverter类:
答案 1 :(得分:0)
我认为您需要deserialize
回复
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
您需要使用响应产生的属性创建一个类 说测试类
class Test
{
//define a similar property here
// which you suppose it will be return in the response
}
然后
Test routes_list = (Test)json_serializer.DeserializeObject(yourjson);