从流中读取的字符串中获取特定值

时间:2014-01-08 16:59:41

标签: c# string stream

我有一个使用流阅读器从流中读取的字符串。这是在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”。我想得到somestring1和sometring2。我认为有一种更好的方法可以做到这一点,而不是将整个流转换为字符串来获取每个值。你有什么想法?谢谢!

3 个答案:

答案 0 :(得分:0)

我建议读入字符串,然后使用如下方法分割数据:

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;
}

答案 1 :(得分:0)

我认为你可以使用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

答案 2 :(得分:0)

如果您将流转换为string,那么您可以轻松地使用System.Web.HttpUtility.ParseQueryString(s)

获取somestring1和sometring2