我在protobuf-net changelog中注意到IList<>得到了支持,但我得到了“无法创建接口实例”的例外情况。如果我改为IEnumerable<>那么生活是美好的。这听起来不错吗?
// Client call
public override IList<IApplicationWorkflow> Execute(IRoleManagement service)
{
IList<ApplicationWorkflowMessagePart> list = service.RetrieveWorkflows(roleNames);
IList<IApplicationWorkflow> workflows = new List<IApplicationWorkflow>(list.Count);
foreach (ApplicationWorkflowMessagePart a in list)
{
workflows.Add(new ApplicationWorkflowImpl(a));
}
return workflows;
}
// Service contract
[OperationContract, ProtoBehavior]
[ServiceKnownType(typeof (ServiceFault))]
[FaultContract(typeof (ServiceFault))]
IList<ApplicationWorkflowMessagePart> RetrieveWorkflows(string[] roleNames);
// Service implementation
public IList<ApplicationWorkflowMessagePart> RetrieveWorkflows(string[] roleNames)
{
IList<IApplicationWorkflow> workflows = manager.RetrieveApplicationWorkflows(roleNames);
IList<ApplicationWorkflowMessagePart> workflowParts = new List<ApplicationWorkflowMessagePart>();
if (workflows != null)
{
foreach (IApplicationWorkflow workflow in workflows)
{
workflowParts.Add(
ModelMediator.GetMessagePart<ApplicationWorkflowMessagePart, IApplicationWorkflow>(workflow));
}
}
return workflowParts;
}
谢谢, 麦克
此外,是否有文档网站有这个和其他答案?我不想问新问题。 :)
答案 0 :(得分:2)
目前它会支持IList<T>
作为属性,只要它不必创建它 - 即允许类似(为了简洁而未显示属性):
class Order {
private IList<OrderLine> lines = new List<OrderLine>();
public IList<OrderLine> Lines {get {return lines;}}
}
我必须检查,但出于类似的原因,我希望它适用于Merge
,但不适用于Deserialize
(这是WCF挂钩使用的)。但是,我无法想到它无法默认为List<T>
的原因......目前它还没有。
最简单的选择可能是坚持使用List<T>
/ T[]
- 但我可以看一下你是否想要......但我正处于(工作)项目的“紧缩”状态此刻,我今天无法举起发动机罩。
重新“这个和其他答案”......有一个google group,但这不仅仅是protobuf-net(protobuf-net只是许多“协议缓冲”实现中的一个)。
您也可以在project site上自由记录问题。我的意思是整理常见问题解答并将它们添加到网站上的维基 - 但时间并不总是我的朋友......
但是嘿!我在这里......; - p