通过重新分解的foreach循环访问DataContractJsonSerializer <t>属性</t>

时间:2010-06-30 18:48:54

标签: c# asp.net .net datacontractjsonserializer

我有以下代码。

string content = twitterMsg.text;正在为twitterMsg创建错误'使用未分配的本地变量'。我似乎无法访问TwitterSearchResponse.results.text集合中的DataContractJsonSerializer<TwitterMain>字段。

TwitterSearchResponse.results是一个数组(对象属性集),其中包含多个字符串字段,其中包含textuser_info等名称。

任何人都可以帮忙吗?

更新代码如下。我仍然高度困惑为什么我无法正确迭代TwitterSearchResponse.results并分配content = twitterMsg.text

对于它的价值,这是我的DataContractJsonSerializer方法:

String url = String.Format("http://search.twitter.com/search.json?q={0}&rpp=20", Server.UrlEncode(txtSearchFor.Text));


// parse the JSON data
using (MemoryStream ms = new MemoryStream(wc.DownloadData(url)))
{
    DataContractJsonSerializer jsonSerializer =
        new DataContractJsonSerializer(typeof(TwitterMain));
    TwitterSearchResponse = jsonSerializer.ReadObject(ms) as TwitterMain;  // read as JSON and map as TwitterOut
}

以下是问题所在的原始发布代码。

    public List<MatchCollection> returnMatches(DataContractJsonSerializer<TwitterMain> TwitterSearchResponse)
{
        List<MatchCollection> messageLinks = new List<MatchCollection>();

        foreach (TwitterResult twitterMsg in TwitterSearchResponse.results)
        {
            string content = twitterMsg.text;

            // capture internet protocol pre-fixed words from message
            string pattern = @"...";
            messageLinks.Add(Regex.Matches(content, pattern, RegexOptions.IgnoreCase));

            // capture @username twitter users from message
            string atUsernamePattern = @"@([a-zA-Z0-9-_]+)";
            MatchCollection PeopleMatches = Regex.Matches(content, atUsernamePattern, RegexOptions.IgnoreCase);
        }

        return messageLinks;
}

1 个答案:

答案 0 :(得分:2)

我怀疑实际报告使用了未分配的局部变量MessageLinks。您对twitterMsg的使用看起来很不错。

所以,最大的问题是:如果没有任何结果,你想要返回什么?如果您很高兴返回null,只需在声明MessageLinks时分配值。

下一个问题:你真的只想回复你找到的最后一个MatchCollection吗?这就是当前的行为:你循环遍历所有变量,每次设置相同的局部变量(即替换前一个值),然后返回最后一个值。

最后一个问题:为什么你有一个以驼峰为基础的方法名称(returnMatches),一个以Pascal为基础的局部变量(MessageLinks),一个以Pascal为基础的参数名称({{ 1}})和一个骆驼状的属性(TwitterSearchResponse)?我认为text是由于它来自JSON的方式 - 但是否则遵循正常的.NET命名约定是个好主意。