Объекты, возвращаемые из асинхронных вызовов Silverlight, теряют содержащиеся в них агрегаты - PullRequest
1 голос
/ 27 февраля 2009

Вызов из элемента управления Silverlight 2.0 в WebService, возвращаемый через MyWebServiceNameEventArgs, не возвращает содержащиеся агрегаты List <>. Например, у меня есть класс Person, у которого есть List и List. Когда я отслеживаю звонок, я вижу, что у человека списки заполнены соответствующим образом. Однако, когда он поступает через MyWebServiceNameEventArgs, списки становятся пустыми. простые типы, такие как FirstName, DOB и т. д., возвращаются правильно.

Что мне нужно сделать, чтобы вернуть вложенные агрегаты?

Вот мой код:

private void btnGetPerson_Click(object sender, RoutedEventArgs e)
{
  var proxy = new TutorWCFServicesClient();
  proxy.GetPersonWithPersonKeyOfCompleted += new EventHandler<GetPersonWithPersonKeyOfCompletedEventArgs>(proxy_GetPersonWithPersonKeyOfCompleted);
  var perID = 29; // testing
  proxy.GetPersonWithPersonKeyOfAsync(perID);
}

void proxy_GetPersonWithPersonKeyOfCompleted(object sender, GetPersonWithPersonKeyOfCompletedEventArgs e)
{
  var per = e.Result;
  if (per != null)
  {
    FirstName.Text = per.FirstName;
    LastName.Text = per.LastName;
    if (per.Phones != null)
    {
      var hPhone = (from phone in per.Phones where phone.PhoneType.ToLower() == "home" select phone).FirstOrDefault();
      var cPhone = (from phone in per.Phones where phone.PhoneType.ToLower() == "cell" select phone).FirstOrDefault();
      var wPhone = (from phone in per.Phones where phone.PhoneType.ToLower() == "work" select phone).FirstOrDefault();

      if (hPhone != null)
      {
        PhoneHome.Text = string.Format("({0}) {1}-{2}", hPhone.AreaCode, hPhone.Exchange, hPhone.Number);
      }
      if (cPhone != null)
      {
        PhoneCell.Text = string.Format("({0}) {1}-{2}", cPhone.AreaCode, cPhone.Exchange, cPhone.Number);
      }
      if (wPhone != null)
      {
        PhoneSchool.Text = string.Format("({0}) {1}-{2}", wPhone.AreaCode, wPhone.Exchange, wPhone.Number);
      }
    }
  }
  else
  {
    FirstName.Text = "Not Found";
  }
}

1 Ответ

1 голос
/ 28 февраля 2009

Глупая ошибка, я забыл обновить ServiceReference в приложении Silverlight.

...