ObservableCollection против обычного списка для вызова асинхронных веб-сервисов - PullRequest
2 голосов
/ 15 июня 2011

Все,

Я только что реализовал метод Webservices, который должен принимать в качестве аргумента список объектов.На стороне клиента я попытался назвать это, передав ему список объектов, но компилятор пожаловался, сказав, что вместо него требуется ObservableCollection.Вот код:

на стороне сервера

[WebMethod]
public void SaveMarks(List<CompletedMark> marks)
{
    // TODO: IMPLEMENT SAVING THE MARKS
}

на стороне клиента

private void SaveMarks()
{
    ObservableCollection<CompletedMark> marks = new ObservableCollection<CompletedMark>();
    //List<CompletedMark> marks = new List<CompletedMark>();

    foreach (SelectedField elem in SelectedFields)
    {
        marks.Add(new CompletedMark
                      {
                          FormId = curFormId,
                          QuestionId = elem.Qid,
                          XPos = Canvas.GetLeft(elem.assocGrid),
                          YPos = Canvas.GetTop(elem.assocGrid),
                          Width = elem.assocGrid.Width,
                          Height = elem.assocGrid.Height
                      });
    }
    proxy.SaveMarksAsync(marks);
}

Я закомментировал строку, в которой я изначально указывал Список.Почему мне нужно использовать ObservableCollection здесь, хотя я объявил его как тип List на сервере?Является ли мое объявление на стороне сервера неверным?

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Коллекции типов по умолчанию, которые сериализуются в Silverlight, - это ObservableCollection, в основном для простоты использования в целях привязки данных. Ehsan ответ правильный; Вы можете изменить тип по умолчанию в диалоговом окне «Настройка справочника услуг».

В качестве альтернативы, вы можете изменить это, чтобы сериализовать в общий список (возможно, более полезный, если у вас множество потребителей, или если это скорее объект передачи данных, а не что-то, с чем вы бы связались напрямую).

2 голосов
/ 15 июня 2011

Перейдите в ваш клиентский проект -> Сервисные ссылки -> [Ваш прокси-сервер], затем щелкните правой кнопкой мыши и выберите «Настроить сервисную ссылку».В новом открытом диалоговом окне вы можете указать способ сериализации коллекций.

...