C# 异步Web服务调用的ObservableCollection与普通列表

C# 异步Web服务调用的ObservableCollection与普通列表,c#,wcf,web-services,soap,observablecollection,C#,Wcf,Web Services,Soap,Observablecollection,全部, 我刚刚实现了一个Webservices方法,该方法需要将对象列表作为参数。在客户端,我试图将其称为传递对象列表,但编译器抱怨说它需要一个ObservableCollection。代码如下: 服务器端 [WebMethod] 公共无效保存标记(列表标记) { //TODO:实现保存标记 } 客户端 private void保存标记() { ObservableCollection标记=新的ObservableCollection(); //列表标记=新列表(); foreach(Sele

全部,

我刚刚实现了一个Webservices方法,该方法需要将对象列表作为参数。在客户端,我试图将其称为传递对象列表,但编译器抱怨说它需要一个ObservableCollection。代码如下:

服务器端

[WebMethod]
公共无效保存标记(列表标记)
{
//TODO:实现保存标记
}
客户端

private void保存标记()
{
ObservableCollection标记=新的ObservableCollection();
//列表标记=新列表();
foreach(SelectedFields中的SelectedField元素)
{
标记。添加(新的完成标记)
{
FormId=curFormId,
问题ID=要素Qid,
XPos=Canvas.GetLeft(elem.assocGrid),
YPos=Canvas.GetTop(elem.assocGrid),
宽度=elem.assocGrid.Width,
高度=元素关联网格高度
});
}
proxy.SaveMarksAsync(marks);
}

我已经注释掉了最初指定列表的行。为什么我需要在这里使用ObservableCollection,即使我在服务器上将其声明为类型列表?我的服务器端声明不正确吗?

转到您的客户端项目->服务引用->[您的代理],然后右键单击并选择配置服务引用。在新打开的对话框中,您可以设置将集合序列化的方式。

在Silverlight is ObservableCollection中,将默认类型集合序列化为,主要是为了便于将其用于数据绑定目的。埃桑的回答是正确的;您可以在“配置服务引用”对话框中更改默认类型


或者,您可以将其更改为序列化为通用列表(如果您有多种使用者,或者如果这更像是一个数据传输对象而不是直接绑定到的对象,则可能更有用)。

您最近是否更新/重新生成了代理?它可能不同步是的,它已更新。问题在于所传递的类型,而不是它根本不工作。谢谢,但是更改此类型会有什么影响。为什么默认的ObservableCollection与List相反?根本的机制是什么?
[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);
}