Доступ к свойствам DataContractJsonSerializer <T>через перефакторизованный цикл foreach - PullRequest
0 голосов
/ 30 июня 2010

У меня есть код ниже.

Строка string content = twitterMsg.text; создает ошибку «Использование неназначенной локальной переменной» для twitterMsg.Кажется, я не могу получить доступ к своим полям TwitterSearchResponse.results.text в моей коллекции DataContractJsonSerializer<TwitterMain>.

TwitterSearchResponse.results - это массив (набор свойств объекта) с несколькими строковыми полями, присоединенными с именами, такими как text иuser_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 Ответ

2 голосов
/ 30 июня 2010

Я подозреваю, что на самом деле сообщает об использовании неназначенной локальной переменной MessageLinks. Ваше использование twitterMsg выглядит хорошо.

Итак, главный вопрос: что вы хотите вернуть, если нет каких-либо результатов? Если вы счастливы, возвращая ноль, просто присвойте значение при объявлении MessageLinks.

Следующий вопрос: вы действительно хотите вернуть только последний MatchCollection, который вы нашли? Вот каково текущее поведение: вы перебираете все переменные, каждый раз устанавливаете одну и ту же локальную переменную (то есть заменяете предыдущее значение), а затем возвращаете последнее значение.

Последний вопрос: любая причина, по которой у вас есть имя метода в верблюжьей оболочке (returnMatches), локальная переменная в Паскале (MessageLinks), имя параметра в Паскале (TwitterSearchResponse) и собственность на верблюжьей шкуре (text)? Я бы предположил, что text происходит из-за того, что это происходит из JSON таким образом - но в противном случае будет хорошей идеей следовать обычным соглашениям об именах .NET.

...