使用列表并暴露保藏中心的最佳方式
-
10-07-2019 - |
题
我必须实现其暴露值(整数,自定义类等)的列表的web服务。
我的工作溶液返回List<T>
,并且根据的FxCop最好是返回Collection<T>
或ReadOnlyCollection<T>
如果我选择返回一个ICollection
,web服务等示出的错误:
要为XML序列化,从
Add(System.Int32)
继承的类型必须在其继承层次结构的各个层次的System.Collections.ObjectModel.ReadOnlyCollection
的实现。1
[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
<=>不实现<=>
什么是你最喜欢的内部使用一个<=>和暴露<=>方式? (使用C#,优选框架2.0只)
解决方案
列表
在原来的问题而言,你可以在一个集合包裹一个List
List<Foo> list = new List<Foo>();
// ...
Collection<Foo> col = new Collection<Foo>(list);
这是一个真正的包装;添加项目到包装(COL),它被添加到列表中。这可能是稍显混乱,因为许多这样的构造函数使用参数做初步的人口,但不链接到原始列表。收集
既然你是一个Web服务的边界上,从FxCop的这一建议并不适用。这是非常有用的(内嵌埃里克利珀最近博客),以防止来电者踏着被叫方的记忆 - 但在一个Web服务分布式场景,根本不适用。事实上,由于网络服务具有一定的通用场景数据可查的问题,一个简单的数组可以说是非常实用和务实的web服务边界。在Eric的博客的背景下 - 在这种情况下,没有主叫/被叫问题的问题,因为两者之间的执行障碍。
在WSDL / MEX而言,我怀疑所有3个(名单/收集/阵列)将刚刚成为元素块 - 所以你可能井去取其最方便
其他提示
我通常是从一个WCF Web服务返回的IList