>我有一个使用流阅读器从流中读取的字符串。这是在 WEB API 调用之后,并从请求中获取响应。对于清除视图,这是我的代码。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SOME URL");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
string s = reader.ReadToEnd();
resStream.Flush();
resStream.Close();
reader.Close();
我的字符串的值为"value1=sometring1&value2=somestring2"。我想得到一些字符串1和sometring2。我认为有一种更好的方法来做到这一点,而不是将整个流转换为字符串来获取每个值。你有什么想法吗?谢谢!
如果将流转换为string
,则可以轻松地获得 somestring1 和 sometring2 System.Web.HttpUtility.ParseQueryString(s)
我建议读取字符串,然后使用如下方法拆分数据:
private Dictionary<string, string> SplitValuePairString(string originalString)
{
Dictionary<string, string> result = new Dictionary<string, string>();
if (string.IsNullOrEmpty(originalString))
{
var keyValuePairs = originalString.Split(new char[] { '&' });
foreach (string keyValuePair in keyValuePairs)
{
var parts = keyValuePair.Split(new char[] { '=' });
if (parts.Length == 2)
{
result.Add(parts[0], parts[1]);
}
}
}
return result;
}
我认为您可以使用Regex
解析字符串响应(如果它始终具有此数量的参数,否则您将在MatchCollection
中获得更多结果):
MatchCollection results = Regex.Matches(reader.ReadToEnd(), "=([a-z]*[0-9]*)");
string value1 = results[0].Groups[1].Value;
string value2 = results[1].Groups[1].Value;
此代码完全从字符串 "value1=sometring1&value2=somestring2"
返回:
somestring1
somestring2