解析来自 Httpwebrequest 的 Json 响应

Posted

技术标签:

【中文标题】解析来自 Httpwebrequest 的 Json 响应【英文标题】:Parsing Json response from Httpwebrequest 【发布时间】: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 实际上就像您在此处显示的那样)。 【参考方案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);

希望对你有帮助

【讨论】:

以上是关于解析来自 Httpwebrequest 的 Json 响应的主要内容,如果未能解决你的问题,请参考以下文章

来自本地 WCF 服务的 HttpWebRequest

C#模拟HTTP请求Post JSON

从推送通知解析时出现 SwiftyJson 解析问题

在 Typescript 中解析 JSON 对象

c# WebBrowser登录后怎样直接用HttpWebRequest抓取数据

调用 HttpWebRequest.GetResponse() 时出现协议错误