3

我在 protobuf-net 更改日志中注意到 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;
    }

谢谢,迈克

另外,是否有具有此和其他答案的文档站点?我讨厌问新手问题。:)

4

1 回答 1

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 只是许多“协议缓冲区”实现之一)。

您也可以自由地在项目站点上记录问题。我的意思是整理常见问题解答并将它们添加到网站上的 wiki - 但时间并不总是我的朋友......

但是,嘿!我在这里... ;-p

于 2009-08-06T21:42:21.313 回答