4

我正在尝试使用 HTTP 请求从 google 购物 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 返回并显示在页面上的数据。也许这将有助于更好地解释我的问题。

https://www.googleapis.com/shopping/search/v1/public/products?key=AIzaSyCC0j59RBeGNtf2W2ft6avhfoTdJ1FQ2c4&country=UK&q=BX80637153570K&rankBy=price:ascending&maxResults=1&alt=json

谁能建议我如何在我的网站上使用这些信息。我现在有点迷失了,因为我对这一切都很陌生并且尝试了几种不同的方法。如果这有什么不同,我不需要所有返回的数据?只是价格和链接。

4

2 回答 2

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 类:

将 JSON 反序列化为 C# 动态对象?

于 2013-03-28T11:19:40.833 回答
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);

编辑 1

或者您可以通过此链接
如何将 JSON 对象转换为自定义 C# 对象?

于 2013-03-28T11:16:37.013 回答