解析来自 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 响应的主要内容,如果未能解决你的问题,请参考以下文章