我想要帮助如何从http json的响应中获取文本,这里是请求的来源

时间:2018-10-09 18:28:39

标签: c#

我想要帮助如何从http的响应中获取请求源的文本

var request = (HttpWebRequest)WebRequest.Create("https://xxxx.com/");

        var postData = "{"+'"'+"get"+ '"' +":100}";
        var data = Encoding.ASCII.GetBytes(postData);
        request.Method = "PUT";
        request.ContentType = "application/json";
        request.Headers["X"] = "83ed3926";


        request.ContentLength = data.Length;

        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }



        var response = (HttpWebResponse)request.GetResponse();

        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

现在我希望源代码可以在以下代码中搜索:responseString

示例:

{"auctionInfo":[{"IDEF":224454585435,"itemData":2 ","buyNowPrice":100,"
,{"IDEF":224454839937,"itemData":","buyNowPrice":200,"{"IDEF":315779793672,"timestamp":1539055787,"formation":"f352","Price":100,"assetrd":1,"rating":","buyNowPrice":300,"

我想要获取第一个IDEF和buynowprice并将它们添加到两个字符串中的方法。

如果将运行代码的示例为:

IDEF = 224454839937

buyNowPrice = 100

只采取第一个,其他的只是跳过。

2 个答案:

答案 0 :(得分:0)

如您所见,数据json string内具有某种结构,并且是这样的对象:

public class Item
{
    public int IDEF { get; set; }
    public int itemData { get; set; }
    public float buyNowPrice { get; set; }
}

所以这是代表该json字符串内部结构的c类。 剩下的就是Deserialize该json字符串,您将像这样进行操作:

List<Item> items = JsonConvert.DeserializeObject<List<Item>>(yourJsonStringHere);

在那里,列出了Item类的所有对象。

答案 1 :(得分:0)

这里的第一个问题是您的JSON(文本)已损坏...

它应该像这样:

{
  "auctionInfo": [
    {
      "IDEF": 224454585435,
      "itemData": 2,
      "buyNowPrice": 100
    },
    {
      "IDEF": 224454839937,
      "itemData": 0,
      "buyNowPrice": 200
    },
    {
      "IDEF": 315779793672,
      "timestamp": 1539055787,
      "formation": "f352",
      "Price": 100,
      "assetrd": 1,
      "rating": 0,
      "buyNowPrice": 300
    }
  ]
}

您可以在this site上浏览该JSON。

现在JSON的格式正确,您可以使用名为NewtonSoft JSON的Nuget包对其进行解析:

using System;

public class Program
{
    public static void Main()
    {
        var json = "{\"auctionInfo\":[{\"IDEF\":224454585435,\"itemData\":2,\"buyNowPrice\":100},{\"IDEF\":224454839937,\"itemData\":0,\"buyNowPrice\":200},{\"IDEF\":315779793672,\"timestamp\":1539055787,\"formation\":\"f352\",\"Price\":100,\"assetrd\":1,\"rating\":0,\"buyNowPrice\":300}]}";
        dynamic theObject = Newtonsoft.Json.Linq.JObject.Parse(json);
        dynamic auctionInfo = (Newtonsoft.Json.Linq.JArray)theObject.auctionInfo;
        var theFirstItem = auctionInfo[0];
        var idef = theFirstItem.IDEF;
        var price = theFirstItem.buyNowPrice;
        Console.WriteLine(string.Format("IDEF: {0}, Price: {1}",idef,price));
    }
}

JSON的第一部分是一个对象(这就是我们解析为JObject的原因),但是它包含一个名为“ auctionInfo”的数组。因此,我们必须将theObject.auctionInfo强制转换为JArray。最后,您需要数组中的第一个项目,因此我们将项目取到0索引处...

索引0的项目具有所需的内容(IDEF和价格),因此我们将其打印到控制台上。

您可以看到此代码并运行here