【问题标题】:Parsing Json response from Httpwebrequest解析来自 Httpwebrequest 的 Json 响应
【发布时间】:2020-01-09 17:48:03
【问题描述】:

我正在尝试使用 JSON 格式的 httpwebrequest 解析响应中的数据,我尝试使用 JSON.Net 但似乎没有运气,如果需要,我愿意使用 Regex。

当前代码示例 -

var request = (HttpWebRequest)WebRequest.Create("https://www.example.com/response");
request.Method = "GET";
request.Accept = "application/json";
request.ContentType = "application/json; charset=utf-8;"

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

dynamic data = JOBject.Parse(response);

Console.WriteLine(data.name);

完整响应示例 -

[{"_id":"hello","_source":{"name":"hello","example":"hey"},"_type":"_doc"}]

【问题讨论】:

  • 不是JObject,而是JArray。使用动态:dynamic data = JArray.Parse(response); Console.WriteLine(data[0]._source.name);,不使用:var data = JArray.Parse(response); Console.WriteLine(data[0]["_source"]["name"]);。您可以考虑反序列化为类结构(除非返回的 JSON 实际上就像您在此处显示的那样)。

标签: c# json regex json.net


【解决方案1】:

试试这个:

 WebRequest webRequest = WebRequest.Create("https://www.example.com/response");
            HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
            if (response.StatusDescription == "OK")
            {
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                // Display the content.
                dynamic data = JObject.Parse(responseFromServer);

                Console.Write(data.name);
             }

【讨论】:

  • 这与我已经在做的相同,我的参考文献更紧凑,但我会尽量减少 :),感谢您的输入,希望这会解决它。跨度>
【解决方案2】:

你可以像这样创建这两个类。

public class Source
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("example")]
    public string Example { get; set; }
}

public class ResponseObject
{
    [JsonProperty("_id")]
    public string Id { get; set; }
    [JsonProperty("_source")]
    public Source Source { get; set; }
    [JsonProperty("_type")]
    public string Type { get; set; }
}


然后像这样解析你的响应

var data = JsonConvert.DeserializeObject<ResponseObject>(response);


希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多