WCF 返回空的自定义集合类型
Posted
技术标签:
【中文标题】WCF 返回空的自定义集合类型【英文标题】:WCF returns empty custom collection type 【发布时间】:2015-07-15 11:33:44 【问题描述】:如您所知,ObservableCollection
没有 AddRange
扩展方法。所以我们添加了源自ObservableCollection
的自定义集合:
[CollectionDataContract]
public class CustomObservableCollection<T> : ObservableCollection<T>
public CustomObservableCollection()
: base()
public CustomObservableCollection(IEnumerable<T> collection)
: base(collection)
public CustomObservableCollection(List<T> list)
: base(list)
public void AddRange(IEnumerable<T> range)
foreach (var item in range)
Items.Add(item);
this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
public void Reset(IEnumerable<T> range)
this.Items.Clear();
AddRange(range);
服务引用的默认集合类型为ObservableCollection
。这意味着当您添加服务引用时,您会在客户端看到结果为ObservableCollection
。我们通过修改Reference.svcmap
文件改变了这一点:
<CollectionMappings>
<CollectionMapping TypeName="BusinessModel.Common.CustomObservableCollection`1" Category="List" />
</CollectionMappings>
现在我可以看到我的服务正在向客户端返回CustomObservableCollection
。
但问题是它返回空集合。我知道在服务返回之前自定义集合中有数据,但我的silverlight
客户端收到空集。有没有人知道可能是什么问题?
我们试图添加一个扩展,但问题是扩展方法会为每个元素引发集合更改通知,因此我们的silverlight
应用程序在大型集合上简直是死了。这就是为什么我们使用subclassing
只引发一次事件。
【问题讨论】:
你为什么不为基类库类型ObservableCollection
添加一个AddRange
扩展方法?对我来说,这似乎更容易。
@Martin,当然我们已经尝试过了,但问题是它会为每个元素引发集合更改通知,因此我们的 silverlight 应用程序在大型集合上简直是死了。这就是为什么我们使用子类化只引发一次事件
好的,现在听起来很合理。
【参考方案1】:
我已经从类中删除了属性[CollectionDataContract]
,现在一切正常。
【讨论】:
以上是关于WCF 返回空的自定义集合类型的主要内容,如果未能解决你的问题,请参考以下文章